Ошибка атрибута: объект ‘NoneType’ не имеет атрибута ‘persist’

#function #pyspark #persist

#функция #pyspark #сохраняется

Вопрос:

Когда я пытаюсь сохранить Dataframe в pyspark, я сталкиваюсь с AttributeError: 'NoneType' object has no attribute 'persist' ошибкой. псевдокод выглядит следующим образом:

 ss = SparkSession.builder.getOrCreate()
sqlDF = ss.sql(query) // query contains udf
sqlDF.persist()
  

Результат ss.sql(query).show(10) выглядит следующим образом

       dt|  t|                   u| ra| tm|tra|  alg| fa|
 ---------- --- -------------------- --- --- --- ----- --- 
|2019-04-22|  1|0e4466fb752e0ff6a...|  2|   |   |h5_rl|   |
|2019-04-22|  1|05ce59ff55b70a805...|  4|   |   | null|   |
|2019-04-22|  1|07bc6ebd8f9d0082d...|  2|   |   |h5_rl|   |
  

Вызвана ли ошибка тем, что некоторые значения ячейки не имеют типа? Если да, то как это решить?

Комментарии:

1. Вы можете попробовать sqlDF.persist(StorageLevel. MEMORY_AND_DISK)

Ответ №1:

Вы можете попробовать распечатать схему sqlDF с sqlDF.printSchema() и обнаружить, что какой-то столбец имеет значение NoneType , так что spark не знает, как их сериализовать. Это может быть вызвано тем, что все значения некоторого столбца равны нулю, тогда spark выведет схему этого столбца как NoneType . Вы можете вручную привести столбец к желаемому типу в запросе.