Scala Spark:flatMap不接受返回Option的函数

时间:2018-10-13 16:09:28

标签: scala apache-spark apache-spark-sql flatmap

我正在尝试将具有parseRow的{​​{1}}应用于可选的转换(Dataset),以便flatMap s被丢弃而None s被打开。

Some

不幸的是,我遇到了以下错误:

import org.apache.spark.sql.SparkSession

object Main
{
    def parseRow(line: String): Option[Map[String, String]] = Some(Map())

    def main(args: Array[String])
    {
        val ss = SparkSession.builder.getOrCreate()

        ss.read.textFile("somewhere")
          .flatMap(parseRow _)
          .write.parquet("somewhere/else")
    }
}

我尝试了错误中建议的修复程序,即我添加了[error] Unable to find encoder for type stored in a Dataset. Primitive types (Int, String, etc) and Product types (case classes) are supported by importing spark.implicits._ Support for serializing other types will be added in future releases. [error] .flatMap(parseRow _) [error] ^ ,但它没有任何改变。

我认为我可能处于与here描述的情况类似(即由于某种原因,未应用从import ss.implicits._Option的隐式转换),但是我我在Scala中还不够好,无法为我的案子找到解决方案。

我试图将这一行更改为TraversableOnce.flatMap(line => parseRow(line)),但是没有用。

0 个答案:

没有答案