如何在数据框中的列内处理json数据集

问题描述 投票:0回答:1

我在spark中有一个数据帧,有一列有json类型的数据。

column3:
z:{
    k:{
        q1:null,
        q2:1,
        q3:23,
        q4:null,
        q5:{v1:null, v2:wers, v3:null}
        a1:['sdsad','wqeqw'],
        d1:'123_23'
    },
    l:{ 
        w1:wwew
        w2:null
        w4:123
    }
}

如何处理json上面的内容并执行一些操作,例如:在'_'上爆炸列d1:'123_23'并在数据框中添加另一列。

如何读取json中有多少个键没有空值。如果有任何数组,那么如何计算该数组的元素。

所以我确实有数据框:

以下是示例数据框:

col1 : gf23431  
col2 : 6728103  
col3 : "z:{
 k:{
  q1:null,
  q2:1,
  q3:23,
  q4:null,
  q5:{v1:null, v2:wers, v3:null}
  a1:['sdsad','wqeqw'],
  d1:'123_23'
 },
 l:{ 
  w1:wwew
  w2:null
  w4:123
 }
}"  
col4 : 3658

期望的输出列:

“k:”下的总密钥7 键“k:”下的总非空值5 //具有非空值的键的计数

键“q5:”下的总键数3 键“q5:”下的总非空值1 “a1:”下的总值2 在“d1:”下拆分值并添加另一列246 //将第一个vallue与2相乘并在数据框中添加另一列

所以输出列将是:

col5 : 7
col6 : 5
col7 : 3
col8 : 1
col9 : 2
col10: 246
python pyspark apache-spark-sql
1个回答
0
投票

使用像get_json_object函数之类的东西来提取你想要的字段。你可以将它们与null等进行比较。好像这些字段只是常规的数据帧列。还可以查看其他函数,例如数组长度,地图等。

https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.functions.get_json_object

© www.soinside.com 2019 - 2024. All rights reserved.