我正在研究pyspark,需要编写一个从hive表中读取数据的查询,并返回一个包含所有列和行号的pyspark数据帧。
这就是我的尝试:
SELECT *, ROW_NUMBER() OVER () as rcd_num FROM schema_name.table_name
此查询在配置单元中工作正常,但是当我从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
答案 0 :(得分:0)
ROW_NUMBER()
可能需要订购,因此您可以使用monotonicallyIncreasingId
函数,该函数为您提供表中所有行的行号。
from pyspark.sql.functions import monotonicallyIncreasingId
df.withColumn("rcd_num ", monotonicallyIncreasingId())
OR
SELECT *, ROW_NUMBER() OVER (Order by (select NULL)) as rcd_num FROM schema_name.table_name
您可以按select NULL