【问题标题】:Sequence in Spark SQLSpark SQL 中的序列
【发布时间】:2023-02-08 00:54:05
【问题描述】:

我想在 spark 中创建一个序列最好的方法是什么? (爪哇语)

像这样:

CREATE SEQUENCE SEQ_NUM
INCREMENT BY 1
START WITH 1
MINVALUE 1
NOCYCLE
CACHE 10
ORDER;

【问题讨论】:

  • 结果应该是什么样的?
  • 为从 1 到最后一个数据的每一行编号。像这样:1 , 2 , 3 ......

标签: java oracle apache-spark apache-spark-sql


【解决方案1】:

我认为this is what you want:

sequence(start, stop, step) - 从中​​生成一个元素数组 从开始到停止(包括),逐步递增。的类型 返回的元素与参数表达式的类型相同。

支持的类型有:byte、short、integer、long、date、timestamp。

开始和停止表达式必须解析为同一类型。如果开始 然后停止表达式解析为“日期”或“时间戳”类型 步骤表达式必须解析为 'interval' 或 'year-month interval' 或 'day-time interval' 类型,否则与 开始和停止表达式。

参数:

开始 - 一个表达式。范围的开始。停止 - 一个表达。 结束范围(包括)。 step - 一个可选的表达式。这一步 的范围。如果 start 小于或等于,则默认步长为 1 停止,否则 -1。对于时间序列,它是 1 天和 -1 天 分别。如果开始大于停止,则步骤必须是 负,反之亦然。例子:

SELECT sequence(1, 5);
 [1,2,3,4,5]
SELECT sequence(5, 1);
 [5,4,3,2,1]
SELECT sequence(to_date('2018-01-01'), to_date('2018-03-01'), interval 1 month);
 [2018-01-01,2018-02-01,2018-03-01]
SELECT sequence(to_date('2018-01-01'), to_date('2018-03-01'), interval '0-1' year to month);
 [2018-01-01,2018-02-01,2018-03-01]

【讨论】:

    【解决方案2】:
    1. 日期序列

      如何创建日期序列:

      from pyspark.sql.functions import explode, sequence, to_date
      
      beginDate = '2000-01-01'
      
      endDate = '2050-12-31'
      
      (spark.sql(f"selectexplode(
                                  sequence(to_date('{beginDate}'),
                                  to_date('{endDate}'), interval 1 day)
                                ) 
                   as calendarDate").createOrReplaceTempView('dates'))
      
      1. 简单序列

      如何创建一个简单的序列

      spark.sql(f"select explode(sequence(8,21)) as ColName").createOrReplaceTempView('tabName')
      

    【讨论】:

      猜你喜欢
      • 2016-03-12
      • 2015-07-31
      • 2021-10-28
      • 2016-10-14
      • 1970-01-01
      • 2016-07-10
      • 2016-05-14
      • 1970-01-01
      • 2018-08-06
      相关资源
      最近更新 更多