如何读取 pyspark 数据框中的 protoBuf .pb 文件?
How can I read a protoBuffer .pb file in pyspark dataframe?
假设我有一个 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 页面中提供的示例。
根据blackbishop的建议,没有原生的spark reader可以读取protobuf文件,所以我使用了ScalaPB开源项目来实现这个。 ScalaPB 将整个文件读取为文本文件,然后执行序列化,然后将其转换为数据帧。
https://scalapb.github.io/
假设我有一个 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 页面中提供的示例。
根据blackbishop的建议,没有原生的spark reader可以读取protobuf文件,所以我使用了ScalaPB开源项目来实现这个。 ScalaPB 将整个文件读取为文本文件,然后执行序列化,然后将其转换为数据帧。
https://scalapb.github.io/