我只想将流的内容打印到控制台。我写了下面的代码,但它没有打印任何东西。任何人都可以帮我在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
答案 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是我的流上下文
步骤:
我注意到的另一件事是我必须将行分隔符更改为Unix样式(使用Notepad ++),否则文件没有被拾取。
答案 2 :(得分:0)
尝试下面的代码,它可以工作:
JavaDStream<String> dataStream = jssc.textFileStream("file:///C:/testStream/");