使用Scala + Spark 1.3逐步添加到Hive表

时间:2016-04-26 14:19:12

标签: scala hive apache-spark-1.3

我们的群集有Spark 1.3和Hive 有一个大的Hive表,我需要添加随机选择的行。 我读了一个较小的表并检查了一个条件,如果那个条件为真,那么我抓住我需要的变量然后查询要填充的随机行。我所做的是对该条件table.where(value<number)进行查询,然后使用take(num rows)将其设为数组。然后,由于所有这些行都包含我需要的信息,我需要从大型hive表中随机行,我遍历数组。

当我执行查询时,我在查询中使用ORDER BY RAND()(使用sqlContext)。我创建了一个var Hive table(可变)从较大的表中添加一列。在循环中,我执行unionAll newHiveTable = newHiveTable.unionAll(random_rows)

我已经尝试了很多不同的方法来做到这一点,但我不确定什么是避免CPU和临时磁盘使用的最佳方法。我知道Dataframes不适用于增量添加。 我现在尝试的一件事就是创建一个cvs文件,在循环中逐步将随机行写入该文件,然后在循环结束时,将cvs文件作为表加载,然后执行一个unionAll来获取最终结果表

任何反馈都会很棒。感谢

1 个答案:

答案 0 :(得分:2)

我建议你用hive创建一个外部表,定义位置,然后让spark将输出写为csv到该目录:

在Hive中:

create external table test(key string, value string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ';'
LOCATION '/SOME/HDFS/LOCATION'

然后使用https://github.com/databricks/spark-csv的助手从spark开始,将数据帧写入csv文件并附加到现有文件:

df.write.format("com.databricks.spark.csv").save("/SOME/HDFS/LOCATION/", SaveMode.Append)