scala - Scala Spark:flatMap 不接受返回 Option 的函数
问题描述
我正在尝试将可选转换 ( parseRow
) 应用于 a Dataset
with flatMap
,以便None
s 被丢弃并且Some
s 被解包。
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] ^
我尝试了错误中建议的修复,即我添加了import ss.implicits._
,但它没有改变任何东西。
我想我可能处于与此处描述的情况类似的情况(即,由于某种原因,未应用从Option
to的隐式转换TraversableOnce
),但我在 Scala 中还不够好,无法为我的情况找到解决方案。
我试图将该行更改为.flatMap(line => parseRow(line))
or .flatMap(parseRow)
,但没有成功。
解决方案
推荐阅读
- python - NumPy:将标量分配给切片广播吗?
- php - 如何解决 ORA-12537: TNS:connection closed 错误?
- reactjs - 我想在反应 js 中的另一个文件上使用类组件但没有服务器?
- ios - ios swift UILabel 字体大小不会以编程方式更改
- r - 用逗号分隔将一列粘贴到单行中
- python - 基于满足条件比较版本字符串的最 Pythonic 和有效的方法
- android - 适用于 iOS Swift 和 Android 的向下钻取图表
- unity3d - 无论与对象的距离如何,Unity 2D 以一致的速度向鼠标发射对象
- xampp - 需要一些关于 Elasticsearch php 的指导
- matlab - Matlab 中是否存在 and() 的替代方法,它不检查语法并在找到第一个 false 后立即返回 false?