正在通过pyu udf数据限制?

2024-04-26 09:28:22 发布

您现在位置:Python中文网/ 问答频道 /正文

问题很简单。请遵守下面的代码。你知道吗

@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.DataFramespark.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还要尝试推断数据类型?你知道吗

任何帮助都将不胜感激!你知道吗


Tags: 数据字符串dataframepandasdfmodellibtype