我尝试使用foreach方法将数据插入到HIVE表中。
我使用spark 2.3.0。
这是我的代码
df_drop_window.writeStream
.foreach(new ForeachWriter[Row]() {
override def open(partitionId: Long, epochId: Long): Boolean = true
override def process(value: Row): Unit = {
println(s">> Processing ${value}")
// how to onvert the value as dataframe ?
}
override def close(errorOrNull: Throwable): Unit = {
}
}).outputMode("update").start()
正如您在上面看到的,我想将“值”转换为数据框,然后将数据插入到HIVE表中,就像插入表名(从数据框中选择*)一样。有人可以帮忙吗?是火花串流的新手法
我只能看到以下可用选项。有人可以说我如何将value:Row转换为data frame?
我尝试了以下操作,但出现错误(org.apache.spark.SparkException:任务无法序列化)
df.writeStream
.foreach(new ForeachWriter[Row]() {
override def open(partitionId: Long, epochId: Long): Boolean = true
override def process(value: Row): Unit = {
val rowsRdd = sc.parallelize(Seq(value))
val df2 = spark.createDataFrame(rowsRdd, schema)
df2.createOrReplaceTempView("testing2")
spark.sql("insert into table are.table_name1 Partition(date) select * from testing2")
}
override def close(errorOrNull: Throwable): Unit = {
}
}).outputMode("append").start()
答案 0 :(得分:0)
Spark会话无法在执行者端序列化,您需要广播Spark会话