如何从 PySpark DataFrame 的 Row 对象中获取数值

在本文中,我们将学习如何从 PySpark DataFrame 的 Row 对象中获取特定的数值。

方法 1:使用 <a href="https://www.geeksforgeeks.org/python/getitem-in-python/">getitem() 魔术方法

首先,我们将使用 createDataFrame() 创建一个至少包含一行的 Spark DataFrame。然后,从 DataFrame.collect() 返回的行对象列表中获取一个 Row 对象。接着,我们将使用 getitem() 魔术方法来获取特定列名对应的项。下面给出了相应的语法。

> 语法:DataFrame.getitem(‘Column_Name‘)

>

>

> 返回值:Row 对象中对应于列名的值

Python


CODEBLOCK_c9dca7f5

输出:

+----------------+--------+----------+
|      Tournament|   Month|     Level|
+----------------+--------+----------+
|All England Open|   March|Super 1000|
|   Malaysia Open| January| Super 750|
|      Korea Open|   April| Super 500|
|       Hylo Open|November| Super 100|
|   Spain Masters|   March| Super 300|
+----------------+--------+----------+

Row(Tournament=‘All England Open‘, Month=‘March‘, Level=‘Super 1000‘)
Super 1000
All England Open
Super 1000
March

方法 2:使用 asDict() 方法

我们将使用 createDataFrame() 创建一个至少包含一行的 Spark DataFrame。然后,从 DataFrame.collect() 返回的行对象列表中获取一个 Row 对象。接着,我们将使用 asDict() 方法获取一个字典,其中列名作为键,行值作为字典的值。下面给出了相应的语法:

> 语法:DataFrame.asDict(recursive)

>

>

> 参数

>

>

> recursive: bool :将嵌套的行作为字典返回。默认值为 False。

随后,我们可以轻松地通过 DictionaryName[‘key_name‘] 从字典中获取数值。

Python


CODEBLOCK_dfe18323

输出:

+-----------+--------+----------+
| Tournament|   Month|     Level|
+-----------+--------+----------+
|French Open| October| Super 750|
| Macau Open|November| Super 300|
| India Open| January| Super 500|
|Odisha Open| January| Super 100|
| China Open|November|Super 1000|
+-----------+--------+----------+

Row(Tournament=‘Macau Open‘, Month=‘November‘, Level=‘Super 300‘)

{‘Tournament‘: ‘Macau Open‘, ‘Month‘: ‘November‘, ‘Level‘: ‘Super 300‘}

Macau Open
November
Super 300

方法 3:像操作列表一样操作 Row 对象

在这里,我们将把 Row 对象想象成一个 Python 列表并执行操作。我们将使用 createDataFrame() 创建一个至少包含一行的 Spark DataFrame。然后,从 DataFrame.collect() 返回的行对象列表中获取一个 Row 对象,并像访问列表索引一样访问其中的元素。

> 语法:RowObject[index]

>

>

> 返回值:Row 对象中对应于索引位置的值

让我们通过一个例子来看看如何操作:

Python


CODEBLOCK_e8fbbbb4

输出:

+---------------+------+----------+
|     Tournament| Month|     Level|
+---------------+------+----------+
|Indonesian Open|  June|Super 1000|
|Singapore Open |   May| Super 750|
|  Thailand Open| July | Super 500|
| Hong Kong Open|November| Super 500|
|    Japan Open| July | Super 750|
+---------------+------+----------+

Row(Tournament=‘Thailand Open‘, Month=‘July‘, Level=‘Super 500‘)
Thailand Open
July
Super 500

通过这三种方法,我们可以灵活地从 PySpark DataFrame 的 Row 对象中提取数据,无论是通过列名、字典转换还是索引访问,都能满足不同的数据处理需求。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/49088.html
点赞
0.00 平均评分 (0% 分数) - 0