Apache spark 如何在RDD上使用函数并获得新列(Pyspark)?
我正在寻找一种方法,使用PySpark将函数应用于RDD,并将结果放入新列中。使用数据帧,看起来很简单: 鉴于: 我的代码可以如下所示:Apache spark 如何在RDD上使用函数并获得新列(Pyspark)?,apache-spark,pyspark,spark-dataframe,rdd,pyspark-sql,Apache Spark,Pyspark,Spark Dataframe,Rdd,Pyspark Sql,我正在寻找一种方法,使用PySpark将函数应用于RDD,并将结果放入新列中。使用数据帧,看起来很简单: 鉴于: 我的代码可以如下所示: df= rdd.toDF(['gigya', 'inscription','d_date']) df.show() +--------------------+-------------------------+----------+ | gigya| inscription| d_date| +--
df= rdd.toDF(['gigya', 'inscription','d_date'])
df.show()
+--------------------+-------------------------+----------+
| gigya| inscription| d_date|
+--------------------+-------------------------+----------+
| 1751940903| 2014-06-19|2016-10-19|
|_guid_VubEgxvPPSI...| 2014-09-10|2016-10-19|
+--------------------+-------------------------+----------+
然后:
from pyspark.sql.functions import split, udf, col
get_period_day = udf(lambda item : datetime.strptime(item, "%Y-%m-%d").timetuple().tm_yday)
df.select('d_date', 'gigya', 'inscription', get_period_day(col('d_date')).alias('period_day')).show()
+----------+--------------------+-------------------------+----------+
| d_date| gigya|inscription_service_6Play|period_day|
+----------+--------------------+-------------------------+----------+
|2016-10-19| 1751940903| 2014-06-19| 293|
|2016-10-19|_guid_VubEgxvPPSI...| 2014-09-10| 293|
+----------+--------------------+-------------------------+----------+
有没有一种方法可以在不需要将RDD转换为数据帧的情况下做同样的事情?以地图为例
此代码可以从预期结果中获得一部分:
rdd.map(lambda x: datetime.strptime(x[1], '%Y-%m-%d').timetuple().tm_yday).cache().collect()
帮助?试试:
rdd.map(lambda x:
x + (datetime.strptime(x[1], '%Y-%m-%d').timetuple().tm_yday, ))
或:
尝试:
或:
洛斯汀:谢谢!你太棒了!洛斯汀:谢谢!你太棒了!
rdd.map(lambda x:
x + (datetime.strptime(x[1], '%Y-%m-%d').timetuple().tm_yday, ))
def g(x):
return x + (datetime.strptime(x[1], '%Y-%m-%d').timetuple().tm_yday, )
rdd.map(g)