在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表示法?
答案 0 :(得分:1)
您可以找到实现这种方式的多种原因以及一些反例(SparkR API),但它会认为根本原因是实现纯度。
与R或Pandas数据帧不同,Spark DataFrame
是一个不可变的数据结构。架构的每次更改都会创建一个全新的DataFrame
,因此任何其他操作都会产生误导。
理论上,可以通过替换对JVM __setitem__
的引用来实现DataFrame
,但如果您认为DataFrame
的身份非常明确_jdf
这将是非常单一的。