更新Spark中的数据帧列
更新Spark中的数据帧列
新的Spark DataFrame API让人们不清楚是否可以修改DataFrame的列。
我该如何在DataFrame的第x行、第y列中更改值?
在pandas中,可以这样做:
df.ix[x,y] = new_value
编辑:根据下面的讨论,我们无法修改现有的DataFrame,因为它是不可变的,但是可以返回一个带有所需修改的新DataFrame。
如果只想根据条件替换列中的值,类似于np.where:
from pyspark.sql import functions as F
update_func = (F.when(F.col('update_col') == replace_val, new_value)
.otherwise(F.col('update_col')))
df = df.withColumn('new_column_name', update_func)
如果想对列执行一些操作,并创建一个添加到DataFrame的新列:
import pyspark.sql.functions as F
import pyspark.sql.types as T
def my_func(col):
在这里对列进行操作
return 转换后的值
# 假设my_func返回一个字符串
my_udf = F.UserDefinedFunction(my_func, T.StringType())
df = df.withColumn('new_column_name', my_udf('update_col'))
如果希望新列与旧列具有相同的名称,可以添加以下额外步骤:
df = df.drop('update_col').withColumnRenamed('new_column_name', 'update_col')