Spark 中 关于scala 语法理解的问题
val lines: Dataset[String] = session.read.textFile("")
val words: Dataset[String] = lines.flatMap(_.split(" "))
上面lines是一个dataSet对象,flatMap方法是dataSet中定义的一个方法,上面两行代码在IDEA下没报错误。flatMap如下:
def flatMap[U : Encoder](func: T => TraversableOnce[U]): Dataset[U] =
mapPartitions(_.flatMap(func))
问题:
_.split(" ") 相当于一个函数,传入参数是String类型,返回类型是split的结果类型 Array[String],
而flatmap方法定义为接收 func: T => TraversableOnce[U] , 显然这里的T是String类型,
而 Array[String] 并不是TraversableOnce[U] 类型,因为Array 没有实现TraversableOnce 这个特质,
所以我的问题是: 为什么 我传入 _.split(" ") 这样一个函数 给flatMap,flatMap却没有报错??
简而言之就是我传入的方法 类型,和flatMap 需要的方法类型 好像是不匹配的,不是吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
flatMap需要一个实现了一交遍历接口的类型或返回这个类型的函数,_.split("")返回的是list, list也实现了TraversableOnce,所以类型是匹配的。
scala通过隐式转换默认调用了iterator 方法转换为一个可迭代的对象(Array(1,2,3).iterator)