我正在使用pyspark 1.6.0。
我有现有的pyspark代码来从AWS S3存储桶读取二进制数据文件。其他Spark / Python代码将解析数据中的位以转换为int,string,boolean等。每个二进制文件都有一个数据记录。
在PYSPARK中我使用以下方法读取二进制文件: sc.binaryFiles( “S3N:// .......”)
这很有效,因为它提供了(文件名和数据)的元组,但我正在尝试找到一个等效的PYSPARK流API来读取二进制文件作为流(希望文件名也是如此)。
我试过了: binaryRecordsStream(directory,recordLength)
但我无法正常工作......
PAYSPARK流媒体读取二进制数据文件的人可以分享一些灯吗?
答案 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做类似的事情。