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

时间:2018-09-07 21:01:02

标签: python pyspark apache-spark-sql

我在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 //将第一个值乘以2,并在数据帧中添加为另一列

因此输出列将为:

col5 : 7
col6 : 5
col7 : 3
col8 : 1
col9 : 2
col10: 246

1 个答案:

答案 0 :(得分:0)

使用类似get_json_object的函数来提取所需的字段。您可以将它们与null等进行比较。就好像这些字段只是常规数据框列一样。还要检查其他功能,例如数组长度,映射等。

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