spark无法使用合并模式从不同文件夹中读取所有orc文件

编码器

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

位于/ data / user1 /的user1.orc

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

/ data / user2 /中的user2.orc

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

位于/ data / user3 /的user3.orc

+-------------------+--------------------+
| 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/")

但它为所有文件提供了通用列

+-------------------+
| 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    |
+----+----+----+------+

更新:

貌似不存在用于支持mergeSchemaorc数据,所以在开放售票星火吉拉

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

比较不同文件夹中的所有代码?

如何使用Groovy读取文件夹中的所有文件并替换文件中的模式

如何通过使用unix命令在不同文件夹中合并多个具有相似名称的文件?

合并不同文件夹中具有相同名称的文件

如何在 PHP 中使用和读取不同文件夹中的 php 文件?

如何从Python中的不同文件夹导入所有文件

如何通过asyncTask从不同的URL下载不同文件夹中的文件?

从不同文件夹获取数据

如何从不同文件夹中删除2个同名文件?

循环浏览文件夹中具有不同文件扩展名的所有文件

如何使用cv2.imwrite从不同文件夹中的多个视频保存帧?

Composer自动加载-如何从不同文件夹中获取类,特征,接口?

ffmpeg-从不同文件夹中的图像制作视频

读取不同文件夹深度的多个csv文件

在 Mac 上将多个文件夹中的文件合并到一个文件夹中或在 R 中同时读取不同文件夹中的多个文件

将不同文件夹中的.tsv文件读取到R环境中,并添加具有文件夹名称的列

无法使用Spark合并小的ORC文件

使用.gitignore忽略不同文件夹中的相同文件

如何从python中的不同文件夹中读取多个文件

读取Spark中嵌套文件夹中的所有文件

Bash脚本处理文件夹中的所有文件并将所有输出保存到具有相同文件名的不同文件夹中?

通过Spark读取保存在文件夹中的所有Parquet文件

尝试将不同文件夹中的多个工作簿合并为一个主文件夹

将来自不同文件夹的map-reduce输出合并到单个文件夹中

包含具有不同文件夹的文件

分割R中不同文件夹中的文件

合并两个具有不同文件夹名称的git分支

逐行读取文件夹中的所有.txt文件

如何从Java读取文件夹中的所有文件?