当流正在运行时,Pyspark shell无法使用

时间:2018-01-04 20:31:14

标签: apache-spark cmd pyspark spark-structured-streaming

我刚开始使用pyspark在Windows 10下探索Apache Spark(关注A gentle introduction to Apache Spark)。我进入了关于结构化流的章节,我在使用cmd时遇到了一些麻烦 - 每当我启动一个流时,cmd窗口就变得无法使用,因为Spark保持“打字”的东西甚至是如果我输入任何东西,它很快就会消失。

我的代码(直接来自本书):

from pyspark.sql.functions import window, column, desc, col

staticDataFrame = spark.read.format("csv")\
.option("header", "true")\
.option("inferSchema", "true")\
.load("./data/retail-data/by-day/*.csv")

staticSchema = staticDataFrame.schema

streamingDataFrame = spark.readStream\
.schema(staticSchema)\
.option("maxFilesPerTrigger", 1)\
.format("csv")\
.option("header", "true")\
.load("./data/retail-data/by-day/*.csv")

purchaseByCustomerPerHour = streamingDataFrame\
.selectExpr(
"CustomerId",
"(UnitPrice * Quantity) as total_cost" ,
"InvoiceDate" )\
.groupBy(
col("CustomerId"), window(col("InvoiceDate"), "1 day"))\
.sum("total_cost")

purchaseByCustomerPerHour.writeStream\
.format("memory")\
.option('checkpointLocation','F:/Spark/sparktmp')\
.queryName("customer_purchases")\
.outputMode("complete")\
.start()

我正在谈论的问题:

My issue with cmd

插入符应位于[Stage 6:======>]所在的行。所以如果我想查询流(就像书中所说的那样),我无法做到。而且我不能只打开第二个pyspark shell,因为那将是一个不同的Spark会话。我也不确定流媒体作业是否应该在耗尽所有输入文件(它确实如此)时重新开始,但我想这是一个针对不同问题的主题。

如果我应该提供更多信息,请告诉我。提前谢谢!

1 个答案:

答案 0 :(得分:1)

TL; DR; 只需使用笔记本环境。 Jupyter Notebook(可选择使用Apache Toree内核)或Apache Zeppelin Notebook,可以正常工作并且无法捕获输出(这可能是不受欢迎的How to get the output from console streaming sink in Zeppelin?),并允许您进行不间断的查询。

在标准外壳设置spark.ui.showConsoleProgressfalse中也可以提供帮助:

bin/pyspark --conf "spark.ui.showConsoleProgress=false"
相关问题