Как я могу обработать набор данных JSON внутри столбца во фрейме данных - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть датафрейм в искре, имеющий один столбец с данными типа 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 // умножить 1-е значение на 2 и добавить в качестве еще одного столбца в фрейме данных

поэтому столбцы вывода будут:

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

1 Ответ

0 голосов
/ 08 сентября 2018

Используйте что-то вроде функции get_json_object, чтобы извлечь нужное поле. Вы можете сравнить их с нулем и т. Д., Как если бы эти поля были просто обычными столбцами данных. Также проверьте другие функции для таких вещей, как длина массива, карты и т.д ..

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...