Передаешь лимит данных PySpark pandas_udf? - PullRequest
0 голосов
/ 31 мая 2019

Проблема проста. Пожалуйста, соблюдайте код ниже.

@pyf.pandas_udf(pyt.StructType(RESULTS_SCHEMA_LIST), pyf.PandasUDFType.GROUPED_MAP)
def train_udf(df):
    return train_ml_model(df=df)

results_df = complete_df.groupby('training-zone').apply(train_udf)

Один из столбцов results_df обычно представляет собой очень большую строку (> 4e6 символов). Хотя это не проблема для pandas.DataFrame или spark.DataFrame, когда я преобразую фрейм данных Pandas в фрейм данных искры. Это проблема, когда pandas_udf() пытается это сделать. Возвращенная ошибка pyarrrow.lib.ArrowInvalid could not convert **string** with type pyarrow.lib.StringValue: did not recognize the Python value type when inferring an Arrow data type

Этот UDF работает, если я не возвращаю проблемный столбец или я создаю проблемный столбец только с небольшой строкой, такой как 'wow that is cool', поэтому я знаю, что проблема не в самом udf как таковом.

Я знаю, что функция train_ml_model() работает, потому что, когда я получаю случайную группу из фрейма данных spark, затем преобразую ее в фрейм данных pandas и передаю его в train_ml_model (), он создает ожидаемый фрейм данных pandas со столбцом с массивной строкой.

Я знаю, что spark может обрабатывать такие большие строки, потому что, когда я преобразую фрейм данных pandas в фрейм данных spark, используя spark.createDataFrame(), фрейм данных spark содержит полное ожидаемое значение.

PS: Почему Pyarrow даже пытается определить тип данных, когда я передаю типы в pandas_udf()?

Любая помощь будет принята с благодарностью!

...