【问题标题】:Python Spark: How to join 2 datasets containing >2 elements for each tuplePython Spark:如何为每个元组加入 2 个包含 >2 个元素的数据集
【发布时间】:2021-11-27 11:51:53
【问题描述】:

我正在尝试根据常用的“库存”键连接这两个数据集中的数据

stock, sector
GOOG Tech

stock, date, volume
GOOG 2015 5759725

join 方法应该将它们连接在一起,但是我得到的结果 RDD 的形式是:

GOOG, (Tech, 2015)

我正在尝试获取:

(Tech, 2015) 5759726

此外,我如何通过键(例如(Tech,2015))减少结果以获得每个部门和年份的数字总和?

【问题讨论】:

  • 请在问题中包含您用来尝试解决问题的代码。

标签: apache-spark pyspark


【解决方案1】:
from pyspark.sql.functions import struct, col, sum

#sample data
df1 = sc.parallelize([['GOOG', 'Tech'],
                      ['AAPL', 'Tech'],
                      ['XOM', 'Oil']]).toDF(["stock","sector"])
df2 = sc.parallelize([['GOOG', '2015', '5759725'],
                      ['AAPL', '2015', '123'],
                      ['XOM',  '2015', '234'],
                      ['XOM',  '2016', '789']]).toDF(["stock","date","volume"])

#final output
df = df1.join(df2, ['stock'], 'inner').\
    withColumn('sector_year', struct(col('sector'), col('date'))).\
    drop('stock','sector','date')
df.show()

#numerical summation for each sector and year
df.groupBy('sector_year').agg(sum('volume')).show()

输出是:

+-------+-----------+
| volume|sector_year|
+-------+-----------+
|    123|[Tech,2015]|
|    234| [Oil,2015]|
|    789| [Oil,2016]|
|5759725|[Tech,2015]|
+-------+-----------+

+-----------+-----------+
|sector_year|sum(volume)|
+-----------+-----------+
|[Tech,2015]|  5759848.0|
| [Oil,2015]|      234.0|
| [Oil,2016]|      789.0|
+-----------+-----------+

【讨论】:

    猜你喜欢
    • 2015-01-15
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 2021-12-20
    • 2017-04-18
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多