PySpark 如何在dataframe中检查子字符串
Pyspark 是提供与Apache Spark交互的库。Apache Spark是处理大型数据集的分布式计算系统。在pyspark中,除了传统的Java和Scala语言,我们还可以使用Python编写Spark应用程序。
在PySpark中验证子字符串
Pyspark提供了数据框架API,可帮助我们操作结构化数据,如SQL查询。它可以读取各种数据格式,如parquet、csv、JSON等等。它提供了支持机器学习库的功能,可以进行分类、回归、聚类等操作。
在pyspark数据框中,有不同的方法可以检查子字符串。在本文中,我们将讨论以下方法:
- 使用like()或rlike()
- 使用substr()
安装PySpark
在详细了解每种方法之前,我们必须在工作环境中安装pyspark,可以使用以下代码进行安装。
!pip install pyspark
在成功安装后,我们将获得类似下面所示的输出 –
Looking in indexes: https://pypi.org/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 dataframe。
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)]
- 我们按照上面两个步骤中指定的模式和数据创建 dataframe(数据框) ,创建完成后显示数据框。
df = spark.createDataFrame(data, schema)
df.show()
输出
以下是使用 pyspark 创建的 dataframe 的输出。
------+---+------+----------+-------+
| 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()
输出
对于 substr 函数在 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|
+-----+---+------+----------+-------+
+----+---+------+----------+------+
|name|age|gender|occupation|salary|
+----+---+------+----------+------+
|Jane| 30|Female| Manager|7000.0|
+----+---+------+----------+------+