如何从spark中的DynamoDB表中解析嵌套的Json字符串?

时间:2016-09-23 00:08:02

标签: apache-spark amazon-dynamodb apache-spark-sql spark-dataframe

我正在从Spark读取一个dynamodb表,这个表在一个字段中有一个JSON字符串,在其他字段中有字符串。这不是query Json Column using dataframes的重复。问题的确解释了如何从JSON字符串中提取列,而不是从嵌套的JSON列中提取列。

val users = sqlContext.read.dynamodb("Dynamodb_table")

users.show(1)

示例数据集

 |col1                                              | ID | field2|field3|
 ----------------------------------------------------------
 |{"a":[{"b":"value1"},{"b":value2}],"c":"valC"...}|A1  | X1    |Y1    |

我需要从col1(JSON结构)和ID字段中提取几个字段。我能够弄清楚如何解析JSON字段(col1),如解释here但无法提取嵌套字段

我的代码:

val users = sqlContext.read.dynamodb("Dynamodb_table")
val data = users.selectExpr("get_json_object(col1, '$.c')","get_json_object(col1, '$.a')","ID")

data.show(1,false)
|a                                |c   |ID|
-------------------------------------------
|[{"b":"value1"},{"b":value2"}...]|valC|A1|

现在,当我尝试在上面的数据框中应用相同的get_json_object时,我得到所有空值。

val nestedData = data.selectExpr("get_json_object(a, '$.b')","c","ID")
nestedData.show(false)

|get_json_object(a, '$.b')| c  | ID|
------------------------------------
|null                     |valC|A1 |    

我试过爆炸,因为col' a'有数组和结构。但这并不是数据框架和数据的作用。正在返回col / field' a'作为一个字符串而不是一个数组。任何想法如何解决这个问题?

我的预期结果:我试图从数据集中获得一个扁平的结构

|b     |c   | ID|
-----------------
|value1|valC|A1 |
|value2|valC|A1 |

0 个答案:

没有答案