“未定义类型(值:org.apache.spark.sql.Row)Unit的类ForeachWriter中的方法过程”对于ForeachWriter意味着什么?

时间:2019-01-24 20:34:17

标签: scala apache-spark spark-structured-streaming

我在将数据帧写入配置单元表时尝试使用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类中的方法过程

可能是什么问题?

1 个答案:

答案 0 :(得分:1)

您应该更加小心类型,即比较def process(record: String): Unitabstract class ForeachWriter[T]中的类型。它们不兼容,因此是错误。

来自org.apache.spark.sql.ForeachWriter的scaladoc:

  

abstract def process(value: T): Unit

  

T

def process(record: Row): Unit类型是此处的键。使用<String, Float>,应该可以解决编译错误。