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

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

假设这是一个Dataframe:

  1. val data = Seq(
  2. Row("Ramesh",List("English","German"),Map("hair"->"black","eye"->"brown")),
  3. Row("Vijay",List("Spark","French",null),Map("hair"->"brown","eye"->null)),
  4. Row("Yann",List("Mandrin",""),Map("hair"->"red","eye"->"")),
  5. Row("Ram",null,null),
  6. Row("Jefferson",List(),Map())
  7. )
  8. val schema = new StructType()
  9. .add("name",StringType)
  10. .add("languages", ArrayType(StringType))
  11. .add("properties", MapType(StringType,StringType))
  12. val df = spark.createDataFrame(spark.sparkContext.parallelize(data), schema)

输出:

  1. +----------+--------------+
  2. |name |languages |
  3. +----------+--------------+

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

q5lcpyga

q5lcpyga1#

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

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

相关问题