Hive查询行号

时间:2017-12-06 11:14:47

标签: apache-spark hive pyspark spark-dataframe

我正在研究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

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

设置排序