Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 在Spark中计算行时将行插入配置单元_Hadoop_Apache Spark_Hive - Fatal编程技术网

Hadoop 在Spark中计算行时将行插入配置单元

Hadoop 在Spark中计算行时将行插入配置单元,hadoop,apache-spark,hive,Hadoop,Apache Spark,Hive,比方说,我想构建一个Spark应用程序,我希望它能够部分杀掉。我仍然希望保存成功完成的分区中的数据。我试图通过将其插入蜂巢表来实现这一点。在(PySpark)伪代码中: def myExpensiveProcess(x): ... udfDoExpensiveThing = udf(myExpensiveProcess, StringType()) myDataFrame \ .repartition(100) \ .withColumn("HardEarnedContent",

比方说,我想构建一个Spark应用程序,我希望它能够部分杀掉。我仍然希望保存成功完成的分区中的数据。我试图通过将其插入蜂巢表来实现这一点。在(PySpark)伪代码中:

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。实际上,它直接使用元存储