问题很简单。请遵守下面的代码。你知道吗
@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数据帧转换为spark数据帧时,这对于pandas.DataFrame
或spark.DataFrame
不是问题。当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
如果我不返回有问题的列,或者我让有问题的列只包含一些小字符串,比如“wow that is cool”,那么这个自定义项确实有效,所以我知道问题不在于自定义项本身。你知道吗
我知道函数train_ml_model()
是有效的,因为当我从spark dataframe获得一个随机组,然后将其转换为pandas dataframe,并将其传递给train\ml\u model()时,它会生成预期的pandas dataframe,其中包含一个大字符串的列。你知道吗
我知道spark可以处理如此大的字符串,因为当我使用spark.createDataFrame()
将pandas数据帧转换为spark数据帧时,spark数据帧包含完整的期望值。你知道吗
PS:当我将数据类型传递给pandas_udf()
时,为什么pyarrow还要尝试推断数据类型?你知道吗
任何帮助都将不胜感激!你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐