Spark 2.1.0结构流与本地CSV文件

时间:2017-03-06 00:31:42

标签: scala csv apache-spark spark-structured-streaming

只是为了学习新的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;测试

  1. 我尝试将相同的文件people.txt复制到people1.csv peopele2.csv people3.csv在一个... / csv /文件夹
  2. +----+---+ |name|age| +----+---+ +----+---+
  3. $nc -lk 9999
  4. 我得到了这个:

    val csvDF = spark.readStream.schema(userSchema).csv("/somewhere/csv")

    因此,我可能认为这不是数据 readstream()问题......

2 个答案:

答案 0 :(得分:0)

  1. 文件名为people.txt,而非people.csv。 Spark会抛出错误,说“路径不存在”。我只是使用Spark Shell来验证它。

  2. 输入路径应该是目录。使用文件没有意义,因为这是一个流式查询。

答案 1 :(得分:0)

代码中有2个不同之处: 1.非工作模式的输出模式为“附加”(默认),但工作模式的输出模式为“完成”。 2.非工作选择没有聚合的记录,但工作的记录有groupBy聚合。

我建议您切换到完成输出模式并执行groupBy计数以查看它是否解决了问题。