我有几列要从json字符串中提取。但是有一个字段有嵌套值。不知道该怎么处理?
需要分解成多行才能获取字段名、Value1、Value2的值。
import spark.implicits._
val df = Seq(
("1", """{"k": "foo", "v": 1.0}""", "some_other_field_1"),
("2", """{"p": "bar", "q": 3.0}""", "some_other_field_2"),
("3",
"""{"nestedKey":[ {"field name":"name1","Value1":false,"Value2":true},
| {"field name":"name2","Value1":"100","Value2":"200"}
|]}""".stripMargin, "some_other_field_3")
).toDF("id","json","other")
df.show(truncate = false)
val df1= df.withColumn("id1",col("id"))
.withColumn("other1",col("other"))
.withColumn("k",get_json_object(col("json"),"$.k"))
.withColumn("v",get_json_object(col("json"),"$.v"))
.withColumn("p",get_json_object(col("json"),"$.p"))
.withColumn("q",get_json_object(col("json"),"$.q"))
.withColumn("nestedKey",get_json_object(col("json"),"$.nestedKey"))
.select("id1","other1","k","v","p","q","nestedKey")
df1.show(truncate = false)
我是在一个数据帧中完成的
val df1= df.withColumn("id1",col("id"))
.withColumn("other1",col("other"))
.withColumn("k",get_json_object(col("json"),"$.k"))
.withColumn("v",get_json_object(col("json"),"$.v"))
.withColumn("p",get_json_object(col("json"),"$.p"))
.withColumn("q",get_json_object(col("json"),"$.q"))
.withColumn("nestedKey",get_json_object(col("json"),"$.nestedKey"))
.withColumn(
"nestedKey",
expr("explode_outer(from_json(nestedKey, 'array<struct<`field name`:string, Value1:string, Value2:string>>'))")
).withColumn("fieldname",col("nestedKey.field name"))
.withColumn("valueone",col("nestedKey.Value1"))
.withColumn("valuetwo",col("nestedKey.Value2"))
.select("id1","other1","k","v","p","q","fieldname","valueone","valuetwo")```
still working to make it more elegant
您可以使用< code>from_json解析nestedKey并分解它:
val df2 = df1.withColumn(
"nestedKey",
expr("explode_outer(from_json(nestedKey, 'array<struct<`field name`:string, Value1:string, Value2:string>>'))")
).select("*", "nestedKey.*").drop("nestedKey")
df2.show
+---+------------------+----+----+----+----+----------+------+------+
|id1| other1| k| v| p| q|field name|Value1|Value2|
+---+------------------+----+----+----+----+----------+------+------+
| 1|some_other_field_1| foo| 1.0|null|null| null| null| null|
| 2|some_other_field_2|null|null| bar| 3.0| null| null| null|
| 3|some_other_field_3|null|null|null|null| name1| false| true|
| 3|some_other_field_3|null|null|null|null| name2| 100| 200|
+---+------------------+----+----+----+----+----------+------+------+
问题内容: 我有正在使用nodeJS读取的csv文件。我在阅读之前将每个文件转换为文本。 文件中的每一行都有以’=’分隔的数据。 每行看起来像 “ =“之前的第一部分代表我应用程序中json对象的索引。我的目的是解析此数据并为其构建json表示,以便上面的行成为 使用javascript / node js; 如何将应该表示嵌套JSON键序列的字符串转换为上述json对象? 问题答案: 您可以分割
我正在从Spark读取一个dynamodb表,这个表在一个字段中有一个JSON字符串,在其他字段中有字符串。我能够读取JSON字段,但不能读取嵌套的JSON字段。这不是使用dataframes的查询Json列的副本。这个问题解释了如何从JSON字符串中提取列,但没有解释嵌套的JSON列。 users.show(1) 示例数据集 我需要从col1(JSON结构)和ID字段中提取几个字段。我能够理解如
问题内容: 我正在尝试编写一个不寻常的用例。目的是这样的:我希望客户能够提供一个字符串,例如: 使用此字符串,我的代码将设置一个值,如下所示: 如此简单地标记客户输入就足够了: 但是现在,如何使用$ exploded路径设置数组而不进行诸如eval之类的讨厌操作? 问题答案: 使用引用运算符获取连续的现有数组:
问题内容: 我有一个包含Json的字符串。看起来像这样: 我正在尝试保留“ img_url”。我已经安装了Json.NET,并且在这里发现了类似的问题。 例如这样的事情: 在我来说,我改变到,etc..no运气 现在这是我的代码: 在提取值之前,是否必须对字符串做一些事情?谢谢! 问题答案: 不是根对象的属性-它是对象的属性: 另外的选择:
如何解析嵌套列表的JSON字符串以在pyspark中触发数据帧? 输入数据帧: 预期产出: 示例代码: 有几个例子,但我不知道如何做到这一点: > < li> 如何在pyspark中解析和转换spark数据帧行中的json字符串 如何从pyspark中的spark数据帧行转换具有多个键的JSON字符串?
我正在编写一个接收SQS队列对象的Lambda函数。SQS将json对象作为字符串值发送给SQS。 当我在Lambda中接收到请求时,AWS已经将其包装成一个新的JSON,由于JSON是一个字符串值,因此它将成为无效的JSON。 现在body.message不是有效的JSON。我尝试将它解析为一个原始值,比如如何使用Jackson在对象中包含原始JSON?但它总是抱怨,它在期待逗号分隔对象的地方找