Фильтровать действительные и недействительные записи в Spark - PullRequest
0 голосов
/ 11 июля 2019

У меня есть фрейм данных pyspark, и у него есть число строк n , каждая строка имеет один столбец результат

Содержимое столбца результата представляет собой JSON

{"crawlDate": "2019-07-03 20:03:44", "Code": "200", "c1": "XYZ", "desc": "desc",  "attributes": {"abc":123, "def":456}}
{"crawlDate": "2019-07-04 20:03:44", "Code": "200", "c1": "ABC", "desc": "desc1"}
{"crawlDate": "2019-07-04 20:03:44", "Code": "200", "c1": "ABC", "desc": "desc1", "attributes": {"abc":456, "def":123}}

df.show ():

enter image description here

Теперь я хочу проверить, сколько записей(ROWS) имеют атрибуты элемент и сколько записей не имеют.

Я пытался использовать array_contains, фильтровать и взрывать функций вискра, но он не получил результатов.

Есть предложения, пожалуйста?

Ответы [ 2 ]

1 голос
/ 11 июля 2019
import org.apache.spark.sql.functions._

df.select(get_json_object($"result", "$.attributes").alias("attributes")) .filter(col("attributes").isNotNull).count()

с помощью этой логики мы можем получить количество атрибутов, существующих записей count

для справки, пожалуйста, прочитайте это https://docs.databricks.com/spark/latest/dataframes-datasets/complex-nested-data.html

другое решение, если ваш ввод в формате JSON, тогда

val df = spark.read.json("path of json file")
df.filter(col("attributes").isNotNull).count()

похожий API, который мы можем получить в python.

0 голосов
/ 12 июля 2019

Ниже простейшая логика сработала после много борьбы

total_count = old_df.count()
new_df = old_df.filter(old_df.result.contains("attributes"))
success_count = new_df.count()
failure_count = total_count - success_count
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...