我在Pyspark上工作,需要编写一个查询,该查询从Hive Table读取数据并返回包含所有列和行号的Pyspark DataFrame。
这是我尝试的:
SELECT *, ROW_NUMBER() OVER () as rcd_num FROM schema_name.table_name
此查询在Hive中工作正常,但是当我从Pyspark脚本运行时,会引发以下错误:
Window function row_number() requires window to be ordered, please add ORDER BY clause. For example SELECT row_number()(value_expr) OVER (PARTITION BY window_partition ORDER BY window_ordering) from table;
请建议一些解决方案。
注意:我不希望按任何特定顺序订购行,我只需要在表中存在的所有行而没有任何排序或排序的行。
使用Spark 2.1
ROW_NUMBER()
可能需要订购,因此您可以使用monotonicallyIncreasingId
函数,该功能为您的所有行提供了所有行号。
from pyspark.sql.functions import monotonicallyIncreasingId
df.withColumn("rcd_num ", monotonicallyIncreasingId())
或
SELECT *, ROW_NUMBER() OVER (Order by (select NULL)) as rcd_num FROM schema_name.table_name
您可以通过select NULL