【发布时间】:2018-08-09 00:37:18
【问题描述】:
在 Spark Structured Streaming(Java 中)中读取分区数据时是否可以设置 basePath 选项?我只想加载特定分区中的数据,例如basepath/x=1/,但我也希望将x 作为列加载。设置basePath 为非流式数据帧的方式似乎不起作用。
这是一个最小的例子。我有一个包含以下数据的数据框:
+---+---+
| a| b|
+---+---+
| 1| 2|
| 3| 4|
+---+---+
我将此作为 Parquet 文件写入名为 x=1 的子目录中。
以下代码(使用常规的非流式数据帧)可以正常工作:
Dataset<Row> data = sparkSession.read()
.option("basePath", basePath)
.parquet(basePath + "/x=1");
data.show();
这会产生预期的结果:
+---+---+---+
| a| b| x|
+---+---+---+
| 1| 2| 1|
| 3| 4| 1|
+---+---+---+
但是,以下(使用结构化流式处理 API)不起作用:
StructType schema = data.schema(); // data as defined above
Dataset<Row> streamingData = sparkSession.readStream()
.schema(schema)
.option("basePath", basePath)
.parquet(basePath + "/x=1");
streamingData.writeStream()
.trigger(Trigger.Once())
.format("console")
.start().awaitTermination();
在这种情况下,数据框不包含任何行:
+---+---+---+
| a| b| x|
+---+---+---+
+---+---+---+
【问题讨论】:
-
是的,它不读取分区下的任何文件。
标签: java apache-spark spark-streaming