如何在 PySpark 中检查某个对象是 RDD 还是 DataFrame?


RDD 是弹性分布式数据集的缩写,它是 PySpark 的基本抽象(不可变的对象集合)。RDD 是 PySpark 的主要构建块。它们被分成较小的块并分布在集群中的节点之间。它支持转换和操作。

PySpark 中的 DataFrame

DataFrame 是 Python 中一个二维带标签的数据结构。它用于数据操作和数据分析。它接受不同的数据类型,例如整数、浮点数、字符串等。列标签是唯一的,而行则用唯一的索引值标记,这有助于访问特定的行。

DataFrame 通常用于机器学习任务中,以操作和分析大型数据集。它们支持诸如过滤、排序、合并、分组和转换数据等操作。

PySpark 提供了一个名为 isinstance() 的函数,该函数有助于检查给定对象是 RDD 还是 DataFrame。

语法

以下是使用 isinstance() 函数的语法。

isinstance(data,rdd/dataframe)

其中,

  • Isinstance() 是用于查找数据是 RDD 还是 DataFrame 的函数

  • data 是输入数据

安装 PySpark

首先,我们必须使用以下代码在 Python 环境中安装 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)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 281.4/281.4 MB 5.3 MB/s eta 0:00:00
  Preparing metadata (setup.py) ... done
Collecting py4j==0.10.9.5
  Downloading py4j-0.10.9.5-py2.py3-none-any.whl (199 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 199.7/199.7 KB 28.1 MB/s eta 0:00:00
Building wheels for collected packages: PySpark
  Building wheel for PySpark (setup.py) ... done
  Created wheel for PySpark: filename=PySpark-3.3.2-py2.py3-none-any.whl size=281824028 sha256=184a9a6949d4be5a4746cd53cb28d40cf38a4771048f5f14445d8ee4ab14a07c
  Stored in directory: /root/.cache/pip/wheels/6c/e3/9b/0525ce8a69478916513509d43693511463c6468db0de237c86
Successfully built PySpark
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

在使用 isinstance() 函数之前,我们必须创建数据,即 DataFrame 或 RDD。

from PySpark.sql importmSparkSession
from PySpark.sql.types import *

spark = SparkSession.builder \
   .appName("substring check") \
   .getOrCreate()

schema = StructType([
   StructField("name", StringType(), True),
   StructField("age", IntegerType(), True),
   StructField("gender", StringType(), True),
   StructField("occupation", StringType(), True),
   StructField("salary", DoubleType(), True)
])

df = [("John", 25, "Male", "Developer", 5000.0),
        ("Jane", 30, "Female", "Manager", 7000.0),
        ("Bob", 35, "Male", "Director", 10000.0),
        ("Alice", 40, "Female", "CEO", 15000.0)]
data = spark.createDataFrame(df, schema)
df.show()

输出

+-----+---+------+----------+-------+
| 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|
+-----+---+------+----------+-------+

示例

在以下示例中,我们将数据与格式名称 RDD 或 DataFrame 一起传递给 PySpark 的 isinstance() 函数。

from PySpark.sql import DataFrame
from PySpark.rdd import RDD
if isinstance(data, RDD):
   print("The given data is an RDD")
elif isinstance(data, DataFrame):
   print("The given data is a DataFrame")
else:
   print("The given data is neither an RDD nor a DataFrame")

输出

The given data is a DataFrame

示例

在以下示例中,我们将列表数据结构传递给 isinstance() 函数。

from PySpark.sql import DataFrame
from PySpark.rdd import RDD
data = [22,1,14,5,12,5,7,2,24,2,21,11]
if isinstance(data, RDD):
   print("The given data is an RDD")
elif isinstance(data, DataFrame):
   print("The given data is a DataFrame")
else:
   print("The given data is neither an RDD nor a DataFrame")

输出

The given data is neither an RDD nor a DataFrame

更新于: 2023年10月20日

875 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告