【发布时间】:2015-05-20 12:29:39
【问题描述】:
看新的spark DataFrame API,不清楚是否可以修改dataframe列。
我将如何更改数据框的x 列y 中的值?
在pandas 中,这将是:
df.ix[x,y] = new_value
编辑:合并下面所说的内容,您无法修改现有数据框,因为它是不可变的,但您可以返回具有所需修改的新数据框。
如果您只想根据条件替换列中的值,例如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)
如果您想对列执行一些操作并创建一个添加到数据框中的新列:
import pyspark.sql.functions as F
import pyspark.sql.types as T
def my_func(col):
do stuff to column here
return transformed_value
# if we assume that my_func returns a string
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')
【问题讨论】:
-
如果要通过索引访问DataFrame,需要先建一个索引。见,例如stackoverflow.com/questions/26828815/…。或者使用您自己的索引添加一个索引列。
标签: python dataframe apache-spark pyspark apache-spark-sql