【问题标题】:Create auto increment field in Spark SQL temporary table在 Spark SQL 临时表中创建自增字段
【发布时间】:2017-04-01 20:49:51
【问题描述】:

我是 Spark 环境的新手。我在我的项目中使用 Spark SQL。我想在 Spark SQL 临时表中创建自动增量字段。我创建了 UDF,但它不能正常工作。我尝试了互联网上的各种示例。这是我的 Java POJO 类:

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

【问题讨论】:

    标签: java apache-spark hive apache-spark-sql auto-increment


    【解决方案1】:

    我们可以使用 Hive 有状态的 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
    

    注册 UDF:

    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
    

    在这里回答了类似的问题 (How to implement auto increment in spark SQL)

    【讨论】:

    • 我需要这样的东西,但问题是,它是否可以扩展 2 亿的数据。实际上,我想将包含 2 亿行的大文件分解为包含文件的确切 10K 行的较小文件。我想为每一行添加自动递增数并在这样的帮助下批量读取(id > 10,001 和 id
    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2015-03-06
    • 2011-05-21
    相关资源
    最近更新 更多