在Windows系统

时间:2016-02-02 01:14:18

标签: java apache-spark spark-streaming

我只想将流的内容打印到控制台。我写了下面的代码,但它没有打印任何东西。任何人都可以帮我在Spark中读取文本文件作为流?是否存在与Windows系统相关的问题?

public static void main(String[] args) throws Exception {

     SparkConf sparkConf = new SparkConf().setAppName("My app")
        .setMaster("local[2]")
        .setSparkHome("C:\\Spark\\spark-1.5.1-bin-hadoop2.6")
        .set("spark.executor.memory", "2g");

    JavaStreamingContext jssc = new JavaStreamingContext(sparkConf, Durations.seconds(2));

    JavaDStream<String> dataStream = jssc.textFileStream("C://testStream//copy.csv");
    dataStream.print();

    jssc.start();
    jssc.awaitTermination();
}

更新:copy.csv的内容是

0,0,12,5,0
0,0,12,5,0
0,1,2,0,42
0,0,0,0,264
0,0,12,5,0

3 个答案:

答案 0 :(得分:4)

textFileStream用于监控hadoop兼容目录。此操作将监视提供的目录,当您在提供的目录中添加新文件时,它将从新添加的文件中读取/流式传输数据。

您无法使用textFileStream阅读text / csv文件,或者我会说您不需要流媒体,以防您只是阅读文件。

我的建议是监视一些目录(可能是HDFS或本地文件系统),然后使用textFileStream添加文件并捕获这些新文件的内容。

可能在您的代码中,您可以将"C://testStream//copy.csv"替换为C://testStream",并且一旦您的Spark Streaming作业启动并运行,然后将文件copy.csv添加到C://testStream文件夹,请参阅Spark控制台上的输出。

OR

可能是您可以编写另一个命令行Scala / Java程序,它读取文件并通过Socket(在某个PORT#上)抛出内容,然后您可以利用socketTextStream来捕获和读取数据。读取数据后,您将进一步应用其他转换或输出操作。

你也可以考虑利用Flume

有关详细信息,请参阅API Documentation

答案 1 :(得分:1)

这适用于Windows 7和Spark 1.6.3 :(删除其余代码,重要的是如何定义要监控的文件夹)

val ssc = ...
val lines = ssc.textFileStream("file:///D:/tmp/data")
...
print 

...

这监视目录D:/ tmp / data,ssc是我的流上下文

步骤:

  1. 在D:/ tmp / data
  2. 中创建一个文件说1.txt
  3. 输入一些文字
  4. 启动spart应用程序
  5. 将文件重命名为data.txt(我相信只要在目录被spark监视时更改了任意名称)
  6. 我注意到的另一件事是我必须将行分隔符更改为Unix样式(使用Notepad ++),否则文件没有被拾取。

答案 2 :(得分:0)

尝试下面的代码,它可以工作:

JavaDStream<String> dataStream = jssc.textFileStream("file:///C:/testStream/");