更新Spark中的数据帧列

13 浏览
0 Comments

更新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')

0