Hadoop 在Spark中计算行时将行插入配置单元
比方说,我想构建一个Spark应用程序,我希望它能够部分杀掉。我仍然希望保存成功完成的分区中的数据。我试图通过将其插入蜂巢表来实现这一点。在(PySpark)伪代码中:Hadoop 在Spark中计算行时将行插入配置单元,hadoop,apache-spark,hive,Hadoop,Apache Spark,Hive,比方说,我想构建一个Spark应用程序,我希望它能够部分杀掉。我仍然希望保存成功完成的分区中的数据。我试图通过将其插入蜂巢表来实现这一点。在(PySpark)伪代码中: def myExpensiveProcess(x): ... udfDoExpensiveThing = udf(myExpensiveProcess, StringType()) myDataFrame \ .repartition(100) \ .withColumn("HardEarnedContent",
def myExpensiveProcess(x):
...
udfDoExpensiveThing = udf(myExpensiveProcess, StringType())
myDataFrame \
.repartition(100) \
.withColumn("HardEarnedContent", udfDoExpensiveThing("InputColumn")) \
.write.insertInto("SomeExistingHiveTable")
我运行这个直到完成30个分区,然后我终止这个作业。当我选中某个现有HiveTable时,我看到它没有新行
如何持久化完成的数据,而不管哪些数据没有完成?这是预期和期望的行为,可确保输出的一致性 绕过Spark的数据源API直接将数据写入文件系统
myDataFrame \
.repartition(100) \
.withColumn("HardEarnedContent", udfDoExpensiveThing("InputColumn")) \
.rdd \
.foreachPartition(write_to_storage)
其中
write_to_storage
实现所需的逻辑,例如使用。您确定数据存在于配置单元表位置吗?如果我让任务完成,配置单元表将被填充。是否有一种简单的方法将其写入配置单元,而不必使用JDBC手动连接到配置单元?@David Spark使用Thrift连接到HiveServer2,不是JDBC。实际上,它直接使用元存储