对于 pyspark 中的 DataFrame,如果使用 F.lit(1) (或任何其他值)初始化列,则它会被分配给 pandas_udf 内的某些值(在本例中使用 shift(),但也可能发生在任何其他函数上) ),这会导致“索引处的值为空”错误。
谁能提供一些提示为什么会发生这种情况?这是 pyspark 中的错误吗?
请参阅下面的代码和错误。
spark = SparkSession.builder.appName('test').getOrCreate()
df = spark.createDataFrame([Row(id=1, name='a', c=3),
Row(id=2, name='b', c=6),
Row(id=3, name='a', c=2),
Row(id=4, name='b', c=9),
Row(id=5, name='c', c=7)])
df = df.withColumn('f', F.lit(1))
@pandas_udf(df.schema, PandasUDFType.GROUPED_MAP)
def shift_test(pdf):
pdf['f'] = pdf['c'].shift(1)
return pdf
df = df.groupby(['name']).apply(shift_test)
df.show()
Run Code Online (Sandbox Code Playgroud)
f如果我将列设置为等于c
请参阅下面的输出,则不会出现此类错误。
+---+---+----+---+
| c| id|name| f|
+---+---+----+---+
| 3| 1| a| 1|
| 6| 2| b| 1|
| 2| 3| a| 1|
| 9| 4| b| …Run Code Online (Sandbox Code Playgroud)