我正在尝试将具有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))
,但是没有用。