【发布时间】:2020-01-29 16:54:18
【问题描述】:
我在 pyspark 中有一个名为 result 的数据框,我想应用一个 udf 来创建一个新列,如下所示:
result = sqlContext.createDataFrame([(138,5,10), (128,4,10), (112,3,10), (120,3,10), (189,1,10)]).withColumnRenamed("_1","count").withColumnRenamed("_2","df").withColumnRenamed("_3","docs")
@udf("float")
def newFunction(arr):
return (1 + np.log(arr[0])) * np.log(arr[2]/arr[1])
result=result.withColumn("new_function_result",newFunction_udf(array("count","df","docs")))
列数、df、docs 都是整数列。但这会返回
Py4JError:调用时出错 z:org.apache.spark.sql.functions.col。跟踪:py4j.Py4JException: 方法 col([class java.util.ArrayList]) 不存在于 py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:318) 在 py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:339) 在 py4j.Gateway.invoke(Gateway.java:274) 在 py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) 在 py4j.commands.CallCommand.execute(CallCommand.java:79) 在 py4j.GatewayConnection.run(GatewayConnection.java:214) 在 java.lang.Thread.run(Thread.java:748)
当我尝试传递一列并获得其中的正方形时,它工作正常。
感谢任何帮助。
【问题讨论】:
-
请给我们reproducible example 并向我们展示完整的错误信息。
-
@cronoik 已编辑
-
抱歉,您的 createDataframe 函数会引发错误。不应该是
sqlContext.createDataFrame([(138,5,10), (128,4,10), (112,3,10), (120,3,10), (189,1,10)])吗? -
更新带来不便敬请谅解
标签: python numpy apache-spark pyspark apache-spark-sql