Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
告诉pyspark已知的顺序_Pyspark_Data Partitioning - Fatal编程技术网

告诉pyspark已知的顺序

告诉pyspark已知的顺序,pyspark,data-partitioning,Pyspark,Data Partitioning,我有一个巨大的数据集,其中包含一个row_id,因此我知道row_id是单调递增的,并且数据分区是按这个row_id排序的 现在我想使用lag()函数移动一些列: window = sql.Window.partitionBy().orderBy('row_id') df = df.withColumn('shifted_my_value', F.lag(df.my_value).over(window)) 但是,pyspark不知道数据已经按行id排序,希望分析/重新排列整个数据集(尽管我知

我有一个巨大的数据集,其中包含一个row_id,因此我知道row_id是单调递增的,并且数据分区是按这个row_id排序的

现在我想使用lag()函数移动一些列:

window = sql.Window.partitionBy().orderBy('row_id')
df = df.withColumn('shifted_my_value', F.lag(df.my_value).over(window))
但是,pyspark不知道数据已经按行id排序,希望分析/重新排列整个数据集(尽管我知道这将是一个noop)


有没有办法告诉spark我的数据已经按行id排序,它应该只移动我的值中的值而不尝试乱序。

一个选项可能就是不按窗口中的行排序-

window = sql.Window.partitionBy().orderBy('select 1')
df = df.withColumn('shifted_my_value', F.lag(df.my_value).over(window))
我不确定在pyspark中它会像这样或那样工作-

window = sql.Window.partitionBy().orderBy('(select 1)')
df = df.withColumn('shifted_my_value', F.lag(df.my_value).over(window))
df.registerTempTable('df')
spark.sql('select LAG(df.my_value) OVER (order by (select 1)) FROM df' )
在SQL中,它可以这样工作-

window = sql.Window.partitionBy().orderBy('(select 1)')
df = df.withColumn('shifted_my_value', F.lag(df.my_value).over(window))
df.registerTempTable('df')
spark.sql('select LAG(df.my_value) OVER (order by (select 1)) FROM df' )

我担心最后一条命令是“AssertionError:col应该是Column”。前两个抱怨“选择1”不是列。对不起,我忘记在我的sql查询中添加来自df的
。它现在可能可以工作了。是的,我就是这么想的,所以我添加了它,它给出了“AssertionError:col应该是Column”。我还想知道
partitionBy()
参数。如果我的数据集很大,我不能将所有数据放在同一个分区中,对吗?你确定
select 1
真的保持了原始顺序吗?