在PySpark DataFrames中,为什么__setitem__没有完全实现?

时间:2016-07-28 15:14:17

标签: apache-spark dataframe pyspark apache-spark-sql

在PySpark中,我们无法使用传统的pandas或R风格表示法在DataFrame中根据旧列创建新列。例如,假设我尝试连接两列:

import pyspark.sql.functions as F
df['newcol'] = F.concat(df['col_1'], df['col_2'])

结果:

TypeError: 'DataFrame' object does not support item assignment

相反,实现此方法的实现方法是

df = df.withColumn('newcol', F.concat(df['col_1'], df['col_2']))

有没有理由PySpark不实现传统的DataFrame表示法?

1 个答案:

答案 0 :(得分:1)

您可以找到实现这种方式的多种原因以及一些反例(SparkR API),但它会认为根本原因是实现纯度。

与R或Pandas数据帧不同,Spark DataFrame是一个不可变的数据结构。架构的每次更改都会创建一个全新的DataFrame,因此任何其他操作都会产生误导。

理论上,可以通过替换对JVM __setitem__的引用来实现DataFrame,但如果您认为DataFrame的身份非常明确_jdf这将是非常单一的。