我在将数据帧写入配置单元表时尝试使用foreach接收器:
// dp is my dataframe (aggregated streaming data)
dp.writeStream.foreach(
new ForeachWriter[Row] {
def open(partitionId: Long, version: Long): Boolean = true
def process(record: String): Unit = {
//dp.createOrReplaceTempView("tableA")
// i need to do insert into tablename (select * from tableA)
}
def close(errorOrNull: Throwable): Unit = {}
}
).start()
我遇到以下错误
错误:无法创建对象,因为未定义类型(值:org.apache.spark.sql.Row)单元的ForeachWriter类中的方法过程
可能是什么问题?
答案 0 :(得分:1)
您应该更加小心类型,即比较def process(record: String): Unit
和abstract class ForeachWriter[T]
中的类型。它们不兼容,因此是错误。
来自org.apache.spark.sql.ForeachWriter的scaladoc:
abstract def process(value: T): Unit
和
T
def process(record: Row): Unit
类型是此处的键。使用<String, Float>
,应该可以解决编译错误。