PySpark 结构化流输出在 Jupyter Notebook 上不显示

PySpark 结构化流输出在 Jupyter Notebook 上不显示

在本文中,我们将介绍 PySpark 结构化流输出在 Jupyter Notebook 上不显示的问题,并提供解决方法。

阅读更多:PySpark 教程

问题描述

在使用 Jupyter Notebook 运行 PySpark 结构化流作业时,有时会遇到输出不显示的问题。即使代码运行正常,也无法在 Notebook 中看到输出结果。这可能会给调试和开发过程带来困扰。

问题原因

这个问题的原因是因为 Jupyter Notebook 默认情况下只会显示标准输出(stdout),而不会显示标准错误输出(stderr)。然而,结构化流输出通常是通过标准错误输出流进行呈现的。因此,在默认设置下,我们无法在 Notebook 中看到结构化流的输出。

解决方法

方法一:使用 display 函数

PySpark 提供了一个 display 函数,可以在 Jupyter Notebook 中以表格形式显示 DataFrame。可以通过将结构化流转换为 DataFrame,并使用 display 函数来解决输出不显示的问题。

下面是示例代码:

from pyspark.sql import SparkSession

# 创建 SparkSession
spark = SparkSession.builder \
    .appName("StructuredStreamingOutput") \
    .getOrCreate()

# 读取结构化流数据
streamingDF = spark \
    .readStream \
    .format("csv") \
    .option("header", True) \
    .option("inferSchema", True) \
    .load("path/to/input")

# 执行一些转换操作,得到结果 DataFrame
resultDF = streamingDF.select("column1", "column2") \
    .groupBy("column1") \
    .count()

# 使用 display 函数显示结果 DataFrame
display(resultDF)

通过使用 display 函数,我们可以在 Notebook 中以表格形式看到结果 DataFrame。

方法二:使用 writeStream 查询输出

另一种解决方法是使用 writeStream 查询输出的方式,将结构化流输出保存为文件或者发送到外部系统,然后通过查看这些输出来验证流查询的结果。

下面是示例代码:

from pyspark.sql import SparkSession

# 创建 SparkSession
spark = SparkSession.builder \
    .appName("StructuredStreamingOutput") \
    .getOrCreate()

# 读取结构化流数据
streamingDF = spark \
    .readStream \
    .format("csv") \
    .option("header", True) \
    .option("inferSchema", True) \
    .load("path/to/input")

# 执行一些转换操作,得到结果 DataFrame
resultDF = streamingDF.select("column1", "column2") \
    .groupBy("column1") \
    .count()

# 将结果保存为文件
query = resultDF \
    .writeStream \
    .outputMode("complete") \
    .format("csv") \
    .option("checkpointLocation", "path/to/checkpoint") \
    .option("path", "path/to/output") \
    .start()

# 等待流查询完成
query.awaitTermination()

在这个例子中,我们将结果 DataFrame 保存为 CSV 文件,并指定了检查点和输出路径。通过查看保存的文件,我们可以验证流查询的结果。

总结

在本文中,我们介绍了 PySpark 结构化流输出在 Jupyter Notebook 上不显示的问题,并提供了两种解决方法。通过使用 display 函数或者将结果保存为文件,我们可以在 Notebook 中查看结构化流的输出。这些方法可以帮助我们进行调试和开发工作,提高工作效率。希望本文对你有所帮助!

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程