我有一个spark(spark 2.1)作业,该作业使用Kafka直接流处理流数据。我用存储在HDFS中的数据文件丰富了流数据。我首先读取数据文件(* .parquet)并将其存储在数据框中,然后每次使用此数据框来充实一条记录。
该代码运行时没有任何错误,但是没有发生充实。我在调试模式下运行代码,发现数据帧(例如df)显示为无效树。为什么rdd.foreachPartition中的数据框为空?如何解决这个问题?谢谢!
val kafkaSinkVar = ssc.sparkContext.broadcast(KafkaSink(kafkaServers, outputTopic))
Service.aggregate(kafkaInputStream).foreachRDD(rdd => {
val df =ss.read.parquet( filePath + "/*.parquet" )
println("Record Count in DF: " + df.count()) ==> the console shows the files were loaded successfully with the record count = 1300
rdd.foreachPartition(partition => {
val futures = partition.map(event => {
sentMsgsNo.add(1L)
val eventEnriched = someEnrichmen1(event,df) ==> df is shown as invalid tree here
kafkaSinkVar.value.sendCef(eventEnriched)
})
})
})
})