【问题标题】:splitting string column into multiple columns based on key value item using spark scala使用 spark scala 根据键值项将字符串列拆分为多列
【发布时间】:2021-11-25 12:53:22
【问题描述】:

我有一个数据框,其中一列包含多个“键=值”格式的信息。 几乎有 30 个不同的 'key=value' 可以出现在该列中,将使用 4 列 为了理解(_age,_city,_sal,_tag)

id  name   properties
0   A      {_age=10, _city=A, _sal=1000}
1   B      {_age=20, _city=B, _sal=3000, tag=XYZ}
2   C      {_city=BC, tag=ABC}

如何将此字符串列转换为多列? 需要使用 spark scala 数据框。

预期的输出是:

id  name   _age    _city    _sal    tag
0   A      10      A       1000       
1   B      20      B       3000   XYZ
2   C              BC             ABC 

【问题讨论】:

  • 您的属性列的类型是什么?结构还是字符串?
  • 字符串类型为数据类型

标签: scala apache-spark


【解决方案1】:

简答

df
  .select(
    col("id"), 
    col("name"), 
    col("properties.*"), 
    ..
  )

【讨论】:

  • “属性”列的数据类型是字符串
【解决方案2】:

试试这个:

val s = df.withColumn("dummy", explode(split(regexp_replace($"properties", "\\{|\\}", ""), ",")))
    val result= s.drop("properties").withColumn("col1",split($"dummy","=")(0)).withColumn("col1-value",split($"dummy","=")(1)).drop("dummy")
    result.groupBy("id","name").pivot("col1").agg(first($"col1-value")).orderBy($"id").show

【讨论】:

  • 请提出上述问题的答案
  • 请分享宝贵意见
猜你喜欢
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
  • 2020-04-24
  • 1970-01-01
  • 2022-11-15
  • 2018-10-24
相关资源
最近更新 更多