如何读取 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/