Scala 火花贴图和平面贴图结果类型

Scala 火花贴图和平面贴图结果类型,scala,apache-spark,Scala,Apache Spark,看起来map和flatMap返回不同的类型 mySchamaRdd.map p=>Row.fromSeq。。。返回org.apache.spark.rdd.rdd[org.apache.spark.sql.Row],这是spark 1.3中applySchema函数或createDataFrame所必需的 但是,myshamardd.flatMap p=>Row.fromSeq。。。返回org.apache.spark.rdd.rdd[Any],我不能调用applySchema 在flatMap

看起来map和flatMap返回不同的类型

mySchamaRdd.map p=>Row.fromSeq。。。返回org.apache.spark.rdd.rdd[org.apache.spark.sql.Row],这是spark 1.3中applySchema函数或createDataFrame所必需的

但是,myshamardd.flatMap p=>Row.fromSeq。。。返回org.apache.spark.rdd.rdd[Any],我不能调用applySchema

在flatMap之后如何使用applySchema

输入模式示例:名称、说明

Bob, "Software developer"
John, "I like spaghetti"
结果:

Bob, Software
Bob, Developer
John, I
John, like
John, spaghetti

也许我误解了您创建SchemaRDD的方式,或者您误解了flatMap的工作方式。你试过这个吗

mySchemaRDD.flatMap( p => p.getString(1).split(" +").map( x => Row((p.getString(0), x))))

我认为myshamardd.flatMap p=>Row.fromSeq。。。这不是flatMap的恰当用法,因为您应该返回嵌入在某个对象中的一系列对象,以便将其展开并提取您真正想要返回的内容。在您的例子中,您将它嵌入到一行中,而要返回的结果类型是行本身

如果map函数返回标量,为什么必须使用flatMap?如果您可能从map函数中为每个传入记录输出多条记录,或者偶尔不输出记录,那么flatMap非常有用。对于每一行,我希望返回多行。它就像文本标记器。表名示例,AboutMe Bob,软件开发人员John,我喜欢意大利面结果:Bob,软件开发人员John,I John,like John,spaghetti@Dmitry如果将flatMap的映射嵌入到Seq中会怎么样?类似这样的东西myshamardd.flatMap p=>SeqRow.fromSeq@kaktusito然后结果将只包含2项:1 Bob,Seq。。。;约翰,如下。。。。我希望看到所有5项。我想在一个相当大的架构中再添加一列。我在最后一张地图中使用map word=>p:+word。这段代码似乎返回了Seq,这是问题的根本原因。添加Row:map word=>Rowp:+word后,它工作正常。谢谢你的帮助!PS:另一个解决方案-在flatMap之后使用另一个map,行为:myschardd.flatMapp=>Row.fromSeq….mapRow_