【发布时间】:2018-05-07 12:28:53
【问题描述】:
我正在使用带有 Spark 1.6.3 的 Hive
我有一个大型数据集(40000 行,20 列左右,每列可能包含 500 字节 - 3KB 数据)
查询是对 3 个数据集的连接
我希望能够对最终的连接数据集进行分页,并且我发现我可以使用row_number() OVER (ORDER BY 1) 为数据集中的每一行生成一个唯一的行号。
在这之后我可以做
SELECT * FROM dataset WHERE row between 1 AND 100
但是,有些资源建议不要使用 ORDER BY,因为它将所有数据放入 1 个分区(我可以在日志中看到这种情况,其中随机分配将数据移动到一个分区),当这个发生内存不足异常。
如何以更有效的方式对数据集进行分页?
我已启用持久化 - MEMORY_AND_DISK 以便如果分区太大,它会溢出到磁盘(对于某些转换,我可以看到至少有一些数据在我不使用时溢出到磁盘row_number())
【问题讨论】:
标签: apache-spark hive