Spark Streaming - 处理二进制数据文件

时间:2016-06-29 06:19:08

标签: pyspark spark-streaming

我正在使用pyspark 1.6.0。

我有现有的pyspark代码来从AWS S3存储桶读取二进制数据文件。其他Spark / Python代码将解析数据中的位以转换为int,string,boolean等。每个二进制文件都有一个数据记录。

在PYSPARK中我使用以下方法读取二进制文件: sc.binaryFiles( “S3N:// .......”)

这很有效,因为它提供了(文件名和数据)的元组,但我正在尝试找到一个等效的PYSPARK流API来读取二进制文件作为流(希望文件名也是如此)。

我试过了: binaryRecordsStream(directory,recordLength)

但我无法正常工作......

PAYSPARK流媒体读取二进制数据文件的人可以分享一些灯吗?

2 个答案:

答案 0 :(得分:0)

在Spark Streaming中,相关的概念是fileStream API,它在Scala和Java中可用,但在Python中不可用 - 在文档中提到:http://spark.apache.org/docs/latest/streaming-programming-guide.html#basic-sources。如果您正在阅读的文件可以作为文本文件读取,则可以使用textFileStream API

答案 1 :(得分:0)

我对Java Spark有一个类似的问题,我想从S3流式传输更新,并且没有简单的解决方案,因为binaryRecordsStream(<path>,<record length>) API仅用于固定字节长度的记录,并且找不到明显的等效于JavaSparkContext.binaryFiles(<path>)。在阅读了binaryFiles()的内容之后,解决方案是这样做:

JavaPairInputDStream<String, PortableDataStream> rawAuctions = 
        sc.fileStream("s3n://<bucket>/<folder>", 
                String.class, PortableDataStream.class, StreamInputFormat.class);

然后解析来自PortableDataStream对象的单个字节消息。我为Java上下文表示歉意,但也许可以用PYSPARK做类似的事情。