【发布时间】:2020-01-04 09:51:44
【问题描述】:
假设我有一个 protoBuffer 文件 sampleFile.pb,其中包含一些序列化文本,但现在我想在 pySpark 数据帧中读取它。我可以使用 google.protobuf 读回该文件并对其进行反序列化,但数据非常庞大,因此我想以并行分布式方式读取该数据并对其执行转换。我浏览了很多博客,但没有运气。请给我建议。提前致谢。
addressbook.proto
syntax = "proto2";
package tutorial;
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phones = 4;
}
message AddressBook {
repeated Person people = 1;
}
通过addressbook_pb2生成SampleFile.pb文件:
@
Bilalõbilal@gmail.com"
1112222"
2223333"
3334444
所以它只是简单的数据,google protobuff页面中提供的示例。
【问题讨论】:
-
如果您想避免通常的物化循环,许多 protobuf 实现都公开了可用于此类目的的原始读取器 API。这里的模式有多复杂?你有可用的 .proto 架构吗?
-
@MarcGravell 我已经使用 proto 文件和 protobuff .pb 数据编辑并更新了问题。它具有非常简单的数据结构。请指导。
-
问题:您在这里使用什么语言/框架? pySpart 让我想到“python”——pypi.org/project/pystream-protobuf 有用吗?
-
@MarcGravell 对,它可以使用,但想法是将 .pb 文件读入 pyspark 数据帧以进行分布式读取。
-
您不能使用 Spark 本地执行此操作,因为它不提供
pb格式的阅读器。您可以将其作为文本文件读取到 RDD 中,并使用现有库作为@MarcGravell 指向的库来转换为 JSON RDD,以便您可以创建 Dataframe。
标签: apache-spark pyspark protocol-buffers pyspark-dataframes proto