【问题标题】:How can I read a protoBuffer .pb file in pyspark dataframe?如何在 pyspark 数据框中读取 protoBuf .pb 文件?
【发布时间】: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


【解决方案1】:

正如 blackbishop 所建议的,没有可用于读取 protobuf 文件的原生 spark 阅读器,所以我使用 ScalaPB 开源项目来实现这一点。 ScalaPB 将整个文件读取为文本文件,然后进行序列化,然后将其转换为数据帧。

https://scalapb.github.io/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多