Проверка схемы в искре с использованием python - PullRequest
0 голосов
/ 31 марта 2020
Validate_shema(df, dic)
   Df2=df.withcolumn('typ_freq',when(df.schema.["Frequency"].dataType != dic["Frequency"], False). Otherwise ('true')
   Df2=df.withcolumn('typ_region',when(df.schema.["Region"].dataType != dic["Region"], False). Otherwise ('true')

Df2.show()

Это дает мне ошибку - условие должно быть столбцом.

Хотя, когда я попытался проверить длину - как - df.withcolumn ("len_freq", когда (length (df ["Freq "])> dic [" Freq "], False) .otherwise (True) Это сработало успешно.

Кто-нибудь может подсказать решение, почему не работает тип данных один?

1 Ответ

0 голосов
/ 01 апреля 2020

Для проверки схемы в Spark я бы порекомендовал библиотеку Cerberus (https://docs.python-cerberus.org/en/stable/) - есть отличное руководство по использованию Cerberus с Spark: https://www.waitingforcode.com/apache-spark/validating-json-apache-spark-cerberus/read

С точки зрения того, почему текущее решение не работает, вам нужно преобразовать условие для работы с типами столбцов, возможно, используя функцию lit (https://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark. sql .functions.lit. ) - что-то вроде:

import pyspark.sql.functions as F
df = df.withColumn("data_type", F.lit(df.schema.["Frequency"].dataType))
df = df.withcolumn('typ_freq',F.when(F.col("data_type") != dic["Frequency"], False).otherwise('true')

Удачи!

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