看起来map和flatMap会返回不同的类型。
mySchamaRdd.map( p => Row.fromSeq(...))
返回org.apache.spark.rdd.RDD [org.apache.spark。 sql.Row ],这是applySchema函数(或spark 1.3中的createDataFrame)所必需的。
但是,mySchamaRdd.flatMap( p => Row.fromSeq(...)
会返回org.apache.spark.rdd.RDD [任意],我无法调用applySchema()。
如何在flatMap()之后使用applySchema()?
示例(输入架构:名称,描述)
Bob, "Software developer"
John, "I like spaghetti"
结果:
Bob, Software
Bob, Developer
John, I
John, like
John, spaghetti
答案 0 :(得分:0)
也许我误解了你创建SchemaRDD
的方式,或者你误解了flatMap
的工作方式。你试过这个吗?
mySchemaRDD.flatMap( p => p.getString(1).split(" +").map( x => Row((p.getString(0), x))))
我认为mySchamaRdd.flatMap( p => Row.fromSeq(...))
不适合flatMap
使用,因为您应该在某些内容中返回 embedded 的一系列内容,以便平坦它并提取你真正想要归还的东西。在您的情况下,您将嵌入<{1}},而您要返回的结果类型为Row
。