只是为了学习新的Spark结构数据流,我尝试过这样的实验,但不确定我是否对流功能有任何不妥。
首先,我从静态开始,然后使用Spark 2.1.0附带的简单文本(csv)文件:
index
我可以获得如此合理的输出(在Zepplin下)。
for track in tracks:
if track.duration <= 30000:
tracks.remove(track)
并按照示例,我只修改了代码以读取相同的文件并提供了架构
val df = spark.read.format("csv").load(".../spark2/examples/src/main/resources/people.txt")
df.show()
没有错误消息,所以我想将数据写入内存并使用以下代码查看结果:
+-------+---+
| _c0|_c1|
+-------+---+
|Michael| 29|
| Andy| 30|
| Justin| 19|
+-------+---+
然而,在没有错误消息的情况下,我继续使用
获得“空输出”val userSchema = new StructType().add("name", "string").add("age", "integer")
val csvDF = spark
.readStream
.schema(userSchema) // Specify schema of the csv files
.format("csv")
.load(".../spark2/examples/src/main/resources/people.csv")
这些代码在Zeppelin 0.7下进行了测试,我不确定我是否错过了这里的任何内容。与此同时,我在Apache Spark 2.1.0官方网站上使用val outStream = csvDF.writeStream
.format("memory")
.queryName("logs")
.start()
sql("select * from logs").show(truncate = false)
尝试了这个例子,并且运行良好。
我能否知道我做错了什么?
[修改&amp;测试
+----+---+
|name|age|
+----+---+
+----+---+
$nc -lk 9999
我得到了这个:
val csvDF = spark.readStream.schema(userSchema).csv("/somewhere/csv")
因此,我可能认为这不是数据 readstream()问题......
答案 0 :(得分:0)
文件名为people.txt
,而非people.csv
。 Spark会抛出错误,说“路径不存在”。我只是使用Spark Shell来验证它。
输入路径应该是目录。使用文件没有意义,因为这是一个流式查询。
答案 1 :(得分:0)
代码中有2个不同之处: 1.非工作模式的输出模式为“附加”(默认),但工作模式的输出模式为“完成”。 2.非工作选择没有聚合的记录,但工作的记录有groupBy聚合。
我建议您切换到完成输出模式并执行groupBy计数以查看它是否解决了问题。