我们的集群有 Spark 1.3 和 Hive 有一个大型 Hive 表,我需要向其中添加随机选择的行。有一个较小的表,我读取并检查一个条件,如果该条件为真,那么我获取我需要的变量,然后查询要填充的随机行。我所做的是在该条件下进行查询table.where(value<number)
,然后使用take(num rows)
. 然后,由于所有这些行都包含我需要的关于大型 hive 表中需要哪些随机行的信息,所以我遍历数组。
当我进行查询时,我在查询中使用ORDER BY RAND()
(使用sqlContext
)。我创建了一个var Hive table
(可变的)从较大的表中添加一列。在循环中,我做了一个 unionAllnewHiveTable = newHiveTable.unionAll(random_rows)
我尝试了许多不同的方法来做到这一点,但不确定什么是避免 CPU 和临时磁盘使用的最佳方法。我知道 Dataframes 不适合增量添加。我现在要尝试的一件事是创建一个 cvs 文件,在循环中逐步将随机行写入该文件,然后当循环完成时,将 cvs 文件加载为表,然后执行一个 unionAll 以获得我的最终结果桌子。
任何反馈都会很棒。谢谢