добавить записи (строки) в существующий столбец во фрейме данных spark, используя соединение в pyspark - PullRequest
0 голосов
/ 10 октября 2018

Это макетные таблицы:

data1 = [['a', 1100], ['b', 2100], ['c', 3300], ['d', 4400]]
sales = sqlCtx.createDataFrame(data1,['user_id','total_sale'])
data2 = [['b', 1000],['c',2000],['d',3000],['e',4000]]
target = sqlCtx.createDataFrame(data2,['user_id','personalized_target'])
data3 = [['d', 4400],['e', 11000], ['f', 21000], ['g', 33000], ['h', 44000]]
sales_2 = sqlCtx.createDataFrame(data3,['user_id','total_sale'])

Я хочу вставить данные из sales_2 в продажи в том же столбце, используя оператор соединения.(Это требование к дизайну)

sales.join(sales_2,'user_id',"outer")

Этот оператор создает другой столбец с некоторыми нулевыми значениями вместо добавления значений к исходному столбцу.

Окончательный результат должен быть таким же, как результатзаявление о союзе.

sales.union(sales_2).distinct().show()

1 Ответ

0 голосов
/ 10 октября 2018

Вы можете использовать функцию объединения в этом случае

>>> import pyspark.sql.functions as F
>>> 
>>> sales.join(sales_2,'user_id',"outer").select('user_id',F.coalesce(sales['total_sale'],sales_2['total_sale']).alias('total_sale')).show()
+-------+----------+                                                            
|user_id|total_sale|
+-------+----------+
|      g|     33000|
|      f|     21000|
|      e|     11000|
|      h|     44000|
|      d|      4400|
|      c|      3300|
|      b|      2100|
|      a|      1100|
+-------+----------+
...