如何在spark dataframe中分离列内的集合并将值传递给其他列?

bxgwgixi  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(401)

假设这是一个Dataframe:

val data = Seq(
  Row("Ramesh",List("English","German"),Map("hair"->"black","eye"->"brown")),
  Row("Vijay",List("Spark","French",null),Map("hair"->"brown","eye"->null)),
  Row("Yann",List("Mandrin",""),Map("hair"->"red","eye"->"")),
  Row("Ram",null,null),
  Row("Jefferson",List(),Map())
)

val schema = new StructType()
  .add("name",StringType)
  .add("languages", ArrayType(StringType))
  .add("properties", MapType(StringType,StringType))

val df = spark.createDataFrame(spark.sparkContext.parallelize(data), schema)

输出:

+----------+--------------+
|name      |languages     |
+----------+--------------+

我要所有的输出都带有原子值。null也应该被覆盖。

q5lcpyga

q5lcpyga1#

使用 explode_outerorg.apache.spark.sql.functions . 这将使Dataframe中的集合变平。outer命令考虑空值。

df.select($"name",explode_outer($"languages"))
  .show(false)

相关问题