首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何更新Spark中的数据框列

如何更新Spark中的数据框列
EN

Stack Overflow用户
提问于 2021-08-04 09:47:38
回答 1查看 60关注 0票数 1

我有一个数据帧,其中有2个json列。我需要更新基于j1列的j2列。如果j2列的元素为空,则从j1列中选取元素值。j1为JSON字符串,j2为JSON数组。

输入数据帧,

代码语言:javascript
运行
复制
+---------------------------+---------------------------------------+
|         j1                |              j2                       |
+---------------------------+---------------------------------------+
|{"A": "50", "B": "30"}     | [{"A": null}, {"A": "20", "B": null}] |
+---------------------------+---------------------------------------+

输出

代码语言:javascript
运行
复制
+------------------------+---------------------------------------+
|          j1            |              j2                       |
+------------------------+---------------------------------------+
|{"A": "50", "B": "30"}  | [{"A":"50"}, {"A": "20", "B": "30"}]  |
+------------------------+---------------------------------------+

spark版本: 2.4.0语言: scala

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-04 13:39:35

您可以使用regexp_replace函数来获取所需的结果。

代码语言:javascript
运行
复制
  val spark = SparkSession.builder().master("local[*]").getOrCreate()
  import spark.implicits._
  spark.sparkContext.setLogLevel("ERROR")

  val inDF = Seq(("""{"A": "50", "B": "30"} """, """[{"A": null}, {"A": "20", "B": null}]""")).toDF("j1", "j2")

  inDF.withColumn("A", get_json_object('j1, "$.A"))
    .withColumn("B", get_json_object('j1, "$.B"))
    .withColumn("j2", regexp_replace('j2, lit("\"A\": null"), 
      concat(lit("\"A\": "), lit("\""), 'A, lit("\""))))
    .withColumn("j2", regexp_replace('j2, lit("\"B\": null"),
      concat(lit("\"B\": "), lit("\""), 'B, lit("\""))))
    .drop("A", "B")
    .show(false)

+-----------------------+-------------------------------------+
|j1                     |j2                                   |
+-----------------------+-------------------------------------+
|{"A": "50", "B": "30"} |[{"A": "50"}, {"A": "20", "B": "30"}]|
+-----------------------+-------------------------------------+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68649073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档