gpt4 book ai didi

java - 使用 Java 从 parquet 文件读取嵌套 JSON

转载 作者:行者123 更新时间:2023-12-02 05:39:03 29 4
gpt4 key购买 nike

我将 Spark 1.5.2 与 Java 结合使用,并且尝试读取包含源自 JSON 文件的数据的 parquet 文件。我很难弄清楚应该如何读取最初包含嵌套 JSON 的字段,但现在是 WrappedArray<WrappedArray<String>> 。我浏览了 Spark 页面以读取 Parquet 文件,但没有一个示例似乎与我正在寻找的内容相匹配。我做了一些搜索,发现了一些接近但特定于 scala 的东西。

以下是原始 JSON 的示例:

{"page_number":1,"id_groups":[{"ids":["60537"]},{"ids":["65766","7368815"]}]}

我在读取时遇到问题的字段是 id_groups 字段。我读了 Parquet 文件,并进行了表演。架构如下所示:

StructField(id_groups,ArrayType(StructType(StructField(ids,ArrayType(StringType,true),true)),true),true))

我猜我需要为该字段创建一个架构,但我不知道如何使用 Spark Java API 来做到这一点。

这篇文章看起来很有前途(显示了为嵌套数据创建模式的 scala 代码),但我不知道如何使用 Java 复制类似的东西。

spark-specifying-schema-for-nested-json

关于如何从 Parquet 文件中读取 id_groups 数据有什么建议吗?

IntelliJ 在单步执行代码时显示 id_groups 字段是 WrappedArray<WrappedArray<String>> .

最佳答案

我找到了一种读取源自嵌套 JSON 的数据的方法,但我不太喜欢我的做法。

DataFrame parquetData = sqlContext.read().parquet("/Users/leewallen/dev/spark_data/out/ParquetData");
parquetData.registerTempTable("pd");
DataFrame idGroupsDataFrame = sqlContext.sql("select id_groups.ids from pd");

List<String> idList = idGroupsDataFrame.javaRDD()
.map((Function<Row, String>) row -> {
List<String> ids = new ArrayList<>();
List<WrappedArray<String>> wrappedArrayList = row.getList(0);
java.util.Iterator<WrappedArray<String>> wrappedArrayIterator = wrappedArrayList.iterator();
while (wrappedArrayIterator.hasNext()) {
WrappedArray<String> idWrappedArray = wrappedArrayIterator.next();
Iterator<String> stringIter = idWrappedArray.iterator();
List<String> tempIds = new ArrayList<>();
while (stringIter.hasNext()) {
tempIds.add(stringIter.next());
}

ids.add(tempIds.stream()
.reduce((s1, s2) -> String.format("%s,%s", s1, s2))
.get());
}

return ids.stream()
.reduce((s1, s2) -> String.format("%s|%s", s1, s2))
.get();
}).collect();

idList.forEach(id -> System.out.println(id));

如果输入数据如下所示:

{"page_number":1,"id_groups":[{"ids":["60537"]},{"ids":["65766","7368815"]}]}

然后打印输出如下所示:

60537|65766,7368815

如果有人有更好的方法来获得相同的结果,请告诉我。

关于java - 使用 Java 从 parquet 文件读取嵌套 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35096663/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com