解析数据框架以添加新列并更新列pyspark

时间:2017-10-17 11:17:06

标签: python dataframe lambda pyspark

我有以下代码,用于创建数据框,如下所示:

ratings = spark.createDataFrame(
    sc.textFile("myfile.json").map(lambda l: json.loads(l)),
)



ratings.registerTempTable("mytable")

final_df = sqlContext.sql("select * from mytable");

The data frame look something like this

我将created_atuser_id存储到列表中:

user_id_list = final_df.select('user_id').rdd.flatMap(lambda x: x).collect()
created_at_list = final_df.select('created_at').rdd.flatMap(lambda x: x).collect()

并解析其中一个列表以调用另一个函数:

for i in range(len(user_id_list)):
    status=get_status(user_id_list[I],created_at_list[I])

我想在名为status的数据框中创建一个新列,并更新相应user_id_listcreated_at_list value

的值

我知道我需要使用此功能 - 但不知道如何继续

final_df.withColumn('status', 'give the condition here') 

1 个答案:

答案 0 :(得分:0)

不要创建列表。只需为数据帧提供UDF功能

import pyspark.sql.functions as F
status_udf = F.udf(lambda x: get_status(x[0], x[1]))
df = df.select(df.columns + [status_udf(F.col('user_id_list'), \
               F.col('created_at_list value')).alias('status')])