2017-01-10 84 views
0

我對pysparks和rdd完全陌生。我想了解rdd是如何工作的,而且我在訪問rdd中的部分數據時遇到問題。我想從現有的rdd中選擇一些列並創建一個新的rdd。從Python中的另一個rdd創建新的rdd

一個下面的例子:

user_rdd = [Row(id=u'1', first_name=u'Steve', last_name=u'Kent', email=u'[email protected]'),Row(id=u'2', first_name=u'Margaret', last_name=u'Peace', email=u'[email protected]')] 

display(user_rdd) 

| email     | first_name | id | last_name 
| [email protected]  | Steve  | 1 | Kent 
| [email protected] | Margaret | 2 | Peace 

如何從user_rdd選擇2列,創建一個新的RDD像下面?

| id | first_name | last_name | full_name 
| 1 | Steve  | Kent  | Steve Kent 
| 2 | Margaret | Peace  | Margaret Peace 

回答

2

這裏有可能是你所追求什麼(雖然你的RDD看起來就像是從DataFrame派生)

最簡單的方法
from pyspark.sql import Row 

user_rdd = sc.parallelize([ 
    Row(id=u'1', 
     first_name=u'Steve', 
     last_name=u'Kent', 
     email=u'[email protected]'), 
    Row(id=u'2', 
     first_name=u'Margaret', 
     last_name=u'Peace', 
     email=u'[email protected]') 
]) 

new_rdd = user_rdd.map(lambda row: Row(
     first_name=row.first_name, 
     last_name=row.last_name, 
     full_name=row.first_name + ' ' + row.last_name)) 

new_rdd.take(2) 
1

你可以試試這個:

sc = SparkContext(conf=conf) 
user_rdd = [Row(id=u'1', first_name=u'Steve', last_name=u'Kent', email=u'[email protected]'), 
      Row(id=u'2', first_name=u'Margaret', last_name=u'Peace', email=u'[email protected]')] 
rdd = sc.parallelize(user_rdd).map(lambda x: Row(fullname=' '.join([x['first_name'], x['last_name']]), **x.asDict())) 
print(rdd.collect()) 
0

不知道爲什麼你要通過RDD這樣做,因爲行的列表本質上是一個數據幀,它是更容易選擇列並連接它那裏。它比使用RDD更有效率。

from pyspark.sql import Row 
from pyspark.sql.functions import concat_ws 

user_rdd = [Row(id=u'1', first_name=u'Steve', last_name=u'Kent', email=u'[email protected]'),Row(id=u'2', first_name=u'Margaret', last_name=u'Peace', email=u'[email protected]')] 

user_df = spark_session.createDataFrame(user_rdd) 

user_df.select(user_df.id, user_df.first_name, user_df.last_name, concat_ws(' ',user_df.first_name, user_df.last_name).alias('full_name')).show() 

這會給你的輸出數據框:

+---+----------+---------+--------------+ 
| id|first_name|last_name|  full_name| 
+---+----------+---------+--------------+ 
| 1|  Steve|  Kent| Steve Kent| 
| 2| Margaret| Peace|Margaret Peace| 
+---+----------+---------+--------------+ 
相關問題