如何在 PySpark 数据框中检查子字符串?


Pyspark 是提供 Apache Spark 接口的库。Apache Spark 是用于处理大型数据集的分布式计算系统。除了传统的 Java 和 Scala 语言之外,我们还可以使用 Python 在 Pyspark 中编写 Spark 应用程序。

在 PySpark 中验证子字符串

Pyspark 提供了数据框 API,它可以帮助我们操作结构化数据,例如 SQL 查询。它可以读取各种数据格式,如 parquet、csv、JSON 等。它还提供支持机器学习库的功能,可以使用分类、回归、聚类等。

我们有不同的方法来检查 PySpark 数据框中的子字符串。在本文中,我们将讨论以下内容:

  • 使用 like() 或 rlike()

  • 使用 substr()

安装 PySpark

在详细了解每种方法之前,我们必须使用以下代码在我们的工作环境中安装 pyspark。

!pip install pyspark

安装成功后,我们将得到如下所示的类似输出:

Looking in indexes: https://pypi.ac.cn/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
Collecting pyspark
  Downloading pyspark-3.3.2.tar.gz (281.4 MB)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Installing collected packages: py4j, pyspark
  Attempting uninstall: py4j
    Found existing installation: py4j 0.10.9.7
    Uninstalling py4j-0.10.9.7:
      Successfully uninstalled py4j-0.10.9.7
Successfully installed py4j-0.10.9.5 pyspark-3.3.2

在 PySpark 中创建数据框

现在,我们必须使用指定的数据详细信息创建 PySpark 的数据框。步骤如下:

  • 我们必须导入所有必要的 PySpark 模块和包才能创建数据框。

from pyspark.sql import SparkSession
from pyspark.sql.types import *
  • 接下来,我们必须创建 sparksession 来使用 pyspark 数据框。

spark = SparkSession.builder \
    .appName("substring check") \
    .getOrCreate()
  • 我们必须使用 pyspark 定义用于创建数据框的模式。

schema = StructType([
    StructField("name", StringType(), True),
    StructField("age", IntegerType(), True),
    StructField("gender", StringType(), True),
    StructField("occupation", StringType(), True),
    StructField("salary", DoubleType(), True)
])
  • 在此步骤中,我们将创建列表行,然后形成数据框。

data = [("John", 25, "Male", "Developer", 5000.0),
        ("Jane", 30, "Female", "Manager", 7000.0),
        ("Bob", 35, "Male", "Director", 10000.0),
        ("Alice", 40, "Female", "CEO", 15000.0)]
  • 我们根据我们在上述两个步骤中指定的模式和数据创建数据框,并在创建后显示数据框。

df = spark.createDataFrame(data, schema)
df.show()

输出

以下是使用pyspark创建的数据框的输出。

------+---+------+----------+-------+
| name|age|gender|occupation| salary|
+-----+---+------+----------+-------+
| John| 25|  Male| Developer| 5000.0|
| Jane| 30|Female|   Manager| 7000.0|
|  Bob| 35|  Male|  Director|10000.0|
|Alice| 40|Female|       CEO|15000.0|
+-----+---+------+----------+-------+

现在,让我们看看在 PySpark 数据框中检查子字符串的每种方法。

使用 like() 或 rlike() 函数

在 PySpark 中,我们有两个函数like()rlike();它们用于检查数据框的子字符串。like()函数用于检查任何特定列是否包含指定的模式,而rlike()函数则检查列中是否存在正则表达式模式。

from pyspark.sql.functions import col
df = spark.createDataFrame(data, schema)
df.show()
df.where(col("occupation").like("%Developer%")).show()
df.where(col("occupation").rlike(".*Developer.*")).show()

输出

like 和 rlike 函数的输出如下所示。

+-----+---+------+----------+-------+
| name|age|gender|occupation| salary|
+-----+---+------+----------+-------+
| John| 25|  Male| Developer| 5000.0|
| Jane| 30|Female|   Manager| 7000.0|
|  Bob| 35|  Male|  Director|10000.0|
|Alice| 40|Female|       CEO|15000.0|
+-----+---+------+----------+-------+

+----+---+------+----------+------+
|name|age|gender|occupation|salary|
+----+---+------+----------+------+
|John| 25|  Male| Developer|5000.0|
+----+---+------+----------+------+

+----+---+------+----------+------+
|name|age|gender|occupation|salary|
+----+---+------+----------+------+
|John| 25|  Male| Developer|5000.0|
+----+---+------+----------+------+

使用 substr() 函数

substr函数用于从列中提取子字符串,然后检查子字符串是否与指定的模式匹配。

from pyspark.sql.functions import col
df = spark.createDataFrame(data, schema)
df.show()
df.where(col("occupation").substr(1, 5) == "Manag").show()

输出

pysparksubstr函数的输出如下所示。

+-----+---+------+----------+-------+
| name|age|gender|occupation| salary|
+-----+---+------+----------+-------+
| John| 25|  Male| Developer| 5000.0|
| Jane| 30|Female|   Manager| 7000.0|
|  Bob| 35|  Male|  Director|10000.0|
|Alice| 40|Female|       CEO|15000.0|
+-----+---+------+----------+-------+

+----+---+------+----------+------+
|name|age|gender|occupation|salary|
+----+---+------+----------+------+
|Jane| 30|Female|   Manager|7000.0|
+----+---+------+----------+------+

更新于:2023年8月9日

3K+ 次浏览

启动您的职业生涯

完成课程获得认证

开始
广告