Spark map 和 flatMap 结果类型
Spark map and flatMap result types
看起来像 map 和 flatMap return 不同的类型。
mySchamaRdd.map( p => Row.fromSeq(...))
returns org.apache.spark.rdd.RDD[org.apache.spark.sql.Row] applySchema 函数需要(或在 spark 1.3 中创建数据框)。
但是,mySchamaRdd.flatMap( p => Row.fromSeq(...)
returns 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))))
我认为 mySchamaRdd.flatMap( p => Row.fromSeq(...))
不适合使用 flatMap
,因为你应该 return 一系列东西 嵌入 在某些方面,为了 扁平化 它并提取您真正想要的东西 return。在您的情况下,您将 嵌入 它在 Row
中,而您想要 return 的结果类型是 Row
本身。
看起来像 map 和 flatMap return 不同的类型。
mySchamaRdd.map( p => Row.fromSeq(...))
returns org.apache.spark.rdd.RDD[org.apache.spark.sql.Row] applySchema 函数需要(或在 spark 1.3 中创建数据框)。
但是,mySchamaRdd.flatMap( p => Row.fromSeq(...)
returns 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))))
我认为 mySchamaRdd.flatMap( p => Row.fromSeq(...))
不适合使用 flatMap
,因为你应该 return 一系列东西 嵌入 在某些方面,为了 扁平化 它并提取您真正想要的东西 return。在您的情况下,您将 嵌入 它在 Row
中,而您想要 return 的结果类型是 Row
本身。