在sparksql临时表中创建自动递增字段

qojgxg4l  于 2021-06-28  发布在  Hive
关注(0)|答案(1)|浏览(500)

我对spark环境还不熟悉。我在我的项目中使用sparksql。我想在sparksql临时表中创建自动递增字段。我创建了自定义项,但它没有正常工作。我在网上试过各种各样的例子。这是我的java pojo类:

public class AutoIcrementId  {
    int lastValue;
    public int evaluate() {
        lastValue++;
        return lastValue;
    }
}
dz6r00yl

dz6r00yl1#

我们可以使用配置单元有状态的自定义项来自动增加值。代码是这样的。

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

注册自定义项:

CREATE TEMPORARY FUNCTION auto_increment_id AS 
   'org.apache.hadoop.hive.contrib.udf.UDFRowSequence'

用法:

SELECT auto_increment_id() as id, col1, col2 FROM table_name

这里回答了类似的问题(如何在sparksql中实现自动增量)

相关问题