通过df中的键进行映射和缩小

时间:2019-05-01 22:49:17

标签: pyspark

首先-感谢您抽出宝贵时间阅读我的问题。

我试图摆脱Pyspark的束缚,但是我对pyspark中RDD和DF的差异感到困惑。

我的数据:我的数据结构如下:

+-------+-------------+-------+------+-----+
|     ID|         date| ticker|Return| Year|
+-------+-------------+-------+----- +-----+
| 215021|2018-04-12   |  XYZ  | 0.21 | 2018|
| 205021|2018-04-13   |  XYZ  | 0.18 | 2018|
   ...       ...         ...    ...   ...
| 5102  |2012-01-14   |  ABC  | 0.21 | 2012|
| 5102  |2012-01-05   |  ABC  |-1.01 | 2012|
  ...       ...         ...    ...   ... 
+-------+-------------+-------+------+-----+ 

从本质上讲-我有股票和它们的收益的DF。我真正关心的列是Return和Year。我想计算每年的平均回报...

在Python中,它将是:

df.groupby('Year').sum()

但是,我对如何在Pyspark中执行此操作感到非常困惑。这是到目前为止我尝试过的一些思考过程和代码...

  1. 我想我需要为每一行创建一个<key><value>对,这意味着我的密钥将是<year>,而值将是<return>。也许使用映射功能?不太确定,但这是我尝试做的事情:

    df.rdd.map(lambda y: (int(y[5]), float(y[4])))
    

    但是,每当尝试显示结果时,我都会得到一个错误,这意味着我什至不确定我的结构是否正确。

  2. 计算每年的总和-这将需要我ReducebyKey(year) ...,因此大致如下:

    reduceByKey(year)
    

    但是,我得到了错误

    NameError: name 'year' is not defined
    

对此有任何见识将不胜感激。

1 个答案:

答案 0 :(得分:1)

最好使用数据框操作,因为您的数据已经结构化了……示例使用数据集进行汇总。

Public Class _Default
Inherits Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    If Not IsPostBack Then
        Dim listCol As New ListItemCollection
        listCol.Add(New ListItem(String.Empty, String.Empty))
        listCol.Add(New ListItem("New Item", "640"))
        listCol.Add(New ListItem("Another Item", "950"))
        DropDownList1.DataSource = listCol
        DropDownList1.DataBind()
    End If
End Sub

Protected Sub DropDownList1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DropDownList1.SelectedIndexChanged
    Debug.Print(DropDownList1.SelectedValue)
    Debug.Print(DropDownList1.SelectedItem.ToString)
End Sub
End Class

https://spark.apache.org/docs/latest/api/python/pyspark.sql.html

总体-DF是Spark的高级结构化API,具有与Pandas和R DF相似的架构/类型,而RDD是Spark的低级非结构化API,它们不具有架​​构,只是原始(Python,Scala,Java)对象字符串类型。基本上所有DF Spark代码都可以编译为RDD,而只是结构化的表格格式。