小编niu*_*uer的帖子

使用 pandas_udf 时出现“索引值为空”错误

对于 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)

apache-spark-sql pyspark

5
推荐指数
2
解决办法
3272
查看次数

标签 统计

apache-spark-sql ×1

pyspark ×1