Могу ли я использовать pandas udf на pyspark-dataframe после того, как я использовал обычный (скалярный) udf для его очистки? - PullRequest
0 голосов
/ 14 января 2020

Я видел "ошибки" и другие проблемы со смешиванием векторизованных и не векторизованных UDF на фрейме данных pyspark и хочу понять правильный общий подход в будущем.

Из-за проблем с различиями между None в pyspark и nan в pandas я использовал обычный (не векторизованный) udf для очистки столбца списков в фрейме данных pyspark. После очистки я собираюсь использовать векторизованные или pandas UDF для масштабирования и нормализации данных, но сталкиваюсь с ошибкой:

IllegalArgumentException                  Traceback (most recent call last)
/content/spark-2.3.3-bin-hadoop2.7/python/pyspark/sql/utils.py in deco(*a, **kw)
     77                 raise QueryExecutionException(s.split(': ', 1)[1], stackTrace)
     78             if s.startswith('java.lang.IllegalArgumentException: '):
---> 79                 raise IllegalArgumentException(s.split(': ', 1)[1], stackTrace)
     80             raise
     81     return deco

IllegalArgumentException: 'Can not mix vectorized and non-vectorized UDFs'

Этот простой pandas udf, который вызвал это:

@pandas_udf(ArrayType(LongType()))
def func(v):
    return pd.Series(v)

, который работает на небольшом примерном фрейме данных, в котором я не использовал какие-либо UDF (скалярные или иные) не хороший, чистый, умный или масштабируемый! Это работает, хотя. Должен ли нормальный подход использовать все UDF на кадре данных, отправить через цикл RDD wa sh, а затем использовать Pandas UDF? Какой лучший способ справиться с "смешиванием" udf?

...