gpt4 book ai didi

apache-spark - spark 不使用合并模式从不同文件夹读取所有 orc 文件

转载 作者:行者123 更新时间:2023-12-05 07:28:35 25 4
gpt4 key购买 nike

我在三个不同的文件夹中有三个不同的 orc 文件,我想一次将它们全部读入一个数据帧。

user1.orc 位于/data/user1/

+-------------------+--------------------+
| userid | name |
+-------------------+--------------------+
| 1 | aa |
| 6 | vv |
+-------------------+--------------------+

user2.orc 位于/data/user2/

+-------------------+--------------------+
| userid | info |
+-------------------+--------------------+
| 11 | i1 |
| 66 | i6 |
+-------------------+--------------------+

user3.orc 位于/data/user3/

+-------------------+--------------------+
| userid | con |
+-------------------+--------------------+
| 12 | 888 |
| 17 | 123 |
+-------------------+--------------------+

我想一次阅读所有这些并拥有如下数据框

+-------------------+--------------------+--------------------+----------+
| userid | name | info | con |
+-------------------+--------------------+--------------------+----------+
| 1 | aa | null | null |
| 6 | vv | null | null |
| 11 | null | i1 | null |
| 66 | null | i6 | null |
| 12 | null | null | 888 |
| 17 | null | null | 123 |

所以我是这样用的

val df =spark.read.option("mergeSchema","true").orc("file:///home/hadoop/data/")

但是它给出了所有文件的公共(public)列

+-------------------+
| userid |
+-------------------+
| 1 |
| 6 |
| 11 |
| 66 |
| 12 |
| 17 |

那么如何一次读取所有这三个文件呢?

最佳答案

我为您提供了一个非常愚蠢的解决方法,以防万一您找不到任何解决方案。

将所有这些文件读入不同的数据帧,然后执行联合操作,如下所示:

val user1 = sparkSession.read.orc("/home/prasadkhode/data/user1/").toJSON
val user2 = sparkSession.read.orc("/home/prasadkhode/data/user2/").toJSON
val user3 = sparkSession.read.orc("/home/prasadkhode/data/user3/").toJSON

val result = sparkSession.read.json(user1.union(user2).union(user3).rdd)

result.printSchema()
result.show(false)

输出将是:

root
|-- con: long (nullable = true)
|-- info: string (nullable = true)
|-- name: string (nullable = true)
|-- userId: long (nullable = true)

+----+----+----+------+
|con |info|name|userId|
+----+----+----+------+
|null|null|vv |6 |
|null|null|aa |1 |
|null|i6 |null|66 |
|null|i1 |null|11 |
|888 |null|null|12 |
|123 |null|null|17 |
+----+----+----+------+

更新:

对于 orc 数据,似乎不支持 mergeSchemaSpark Jira 中有一个开放票证

enter image description here

关于apache-spark - spark 不使用合并模式从不同文件夹读取所有 orc 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53296570/

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