【发布时间】:2017-01-12 22:58:30
【问题描述】:
我正在尝试从 Python 列表中删除一个元素:
+---------------+
| sources|
+---------------+
| [62]|
| [7, 32]|
| [62]|
| [18, 36, 62]|
|[7, 31, 36, 62]|
| [7, 32, 62]|
我希望能够从上面列表中的每个列表中删除一个元素 rm。我编写了一个函数,可以对列表执行此操作:
def asdf(df, rm):
temp = df
for n in range(len(df)):
temp[n] = [x for x in df[n] if x != rm]
return(temp)
确实删除了rm = 1:
a = [[1,2,3],[1,2,3,4],[1,2,3,4,5]]
In: asdf(a,1)
Out: [[2, 3], [2, 3, 4], [2, 3, 4, 5]]
但我无法让它为 DataFrame 工作:
asdfUDF = udf(asdf, ArrayType(IntegerType()))
In: df.withColumn("src_ex", asdfUDF("sources", 32))
Out: Py4JError: An error occurred while calling z:org.apache.spark.sql.functions.col. Trace:
py4j.Py4JException: Method col([class java.lang.Integer]) does not exist
期望的行为:
In: df.withColumn("src_ex", asdfUDF("sources", 32))
Out:
+---------------+
| src_ex|
+---------------+
| [62]|
| [7]|
| [62]|
| [18, 36, 62]|
|[7, 31, 36, 62]|
| [7, 62]|
(除了将上面的新列附加到 PySpark DataFrame,df)
有什么建议或想法吗?
【问题讨论】:
标签: python apache-spark pyspark apache-spark-sql pyspark-sql