Проблема проста. Пожалуйста, соблюдайте код ниже.
@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()
?
Любая помощь будет принята с благодарностью!