在本文中,我们将学习如何从 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 对象中提取数据,无论是通过列名、字典转换还是索引访问,都能满足不同的数据处理需求。