Spark 展平数据帧
Spark flattening out dataframes
开始使用 spark 我想知道如何 flatmap
或 explode
数据框。
它是使用 df.groupBy("columName").count
创建的,如果我收集它,它具有以下结构:
[[Key1, count], [Key2, count2]]
但我更喜欢
Map(bar -> 1, foo -> 1, awesome -> 1)
实现这样的目标的正确工具是什么?平面图,爆炸还是其他?
上下文:我想使用spark-jobserver。它似乎只提供有意义的结果(例如工作 json 序列化)以防我以后一种形式提供数据ml
我假设您在 DataFrame 上调用 collect
或 collectAsList
?那将 return 和 Array[Row]
/ List[Row]
。
如果是这样 - 将它们转换为映射的最简单方法是使用底层 RDD,将其记录映射到键值元组并使用 collectAsMap
:
def counted = df.groupBy("columName").count()
// obviously, replace "keyColumn" and "valueColumn" with your actual column names
def result = counted.rdd.map(r => (r.getAs[String]("keyColumn"), r.getAs[Long]("valueColumn"))).collectAsMap()
result
具有预期的类型 Map[String, Long]
。
开始使用 spark 我想知道如何 flatmap
或 explode
数据框。
它是使用 df.groupBy("columName").count
创建的,如果我收集它,它具有以下结构:
[[Key1, count], [Key2, count2]]
但我更喜欢
Map(bar -> 1, foo -> 1, awesome -> 1)
实现这样的目标的正确工具是什么?平面图,爆炸还是其他?
上下文:我想使用spark-jobserver。它似乎只提供有意义的结果(例如工作 json 序列化)以防我以后一种形式提供数据ml
我假设您在 DataFrame 上调用 collect
或 collectAsList
?那将 return 和 Array[Row]
/ List[Row]
。
如果是这样 - 将它们转换为映射的最简单方法是使用底层 RDD,将其记录映射到键值元组并使用 collectAsMap
:
def counted = df.groupBy("columName").count()
// obviously, replace "keyColumn" and "valueColumn" with your actual column names
def result = counted.rdd.map(r => (r.getAs[String]("keyColumn"), r.getAs[Long]("valueColumn"))).collectAsMap()
result
具有预期的类型 Map[String, Long]
。