Как реализовать автоматическое приращение в spark SQL(PySpark)


Мне нужно реализовать столбец auto increment в моей таблице spark sql, как я могу это сделать. Будьте добры, проводите меня. я использую pyspark 2.0

Спасибо Кальян

1 2

1 ответ:

Я бы написал / повторно использовал stateful Hive udf и зарегистрировался в pySpark, поскольку Spark SQL имеет хорошую поддержку для Hive.

Проверьте эту строку @UDFType(deterministic = false, stateful = true) в приведенном ниже коде, чтобы убедиться, что она имеет статус UDF.

package org.apache.hadoop.hive.contrib.udf;

import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.hive.ql.udf.UDFType;
import org.apache.hadoop.io.LongWritable;

/**
 * UDFRowSequence.
 */
@Description(name = "row_sequence",
    value = "_FUNC_() - Returns a generated row sequence number starting from 1")
@UDFType(deterministic = false, stateful = true)
public class UDFRowSequence extends UDF
{
  private LongWritable result = new LongWritable();

  public UDFRowSequence() {
    result.set(0);
  }

  public LongWritable evaluate() {
    result.set(result.get() + 1);
    return result;
  }
}

// End UDFRowSequence.java

Теперь постройте банку и добавьте местоположение, когда начнется pyspark get.

$ pyspark --jars your_jar_name.jar

Затем зарегистрируйтесь в sqlContext.

sqlContext.sql("CREATE TEMPORARY FUNCTION row_seq AS 'org.apache.hadoop.hive.contrib.udf.UDFRowSequence'")

Теперь используйте row_seq() в запросе select

sqlContext.sql("SELECT row_seq(), col1, col2 FROM table_name")

Проект по использованию Hive UDFs в pySpark