json - 从s3读取json文件以使用glueContext.read.json粘合pyspark会给出错误的结果
问题描述
有谁知道为什么glueContext.read.json
给我一个错误的结果?基本上以下两种方法给了我非常不同的结果。爆炸后,df2
记录比df1
. 有人有过同样的经历吗?谢谢!!
df1 = glueContext.create_dynamic_frame_from_options("s3", format="json", connection_options = {"paths": ["s3://.../"]})
df2 = glueContext.read.json("s3://.../",multiLine=True)
解决方案
通常glueContext.create_dynamic_frame_from_options
用于从源位置(大文件)读取分组文件,因此默认情况下它会考虑文件的所有分区。下面是语法:
df = glueContext.create_dynamic_frame_from_options("s3", {'paths': ["s3://s3path/"], 'recurse':True, 'groupFiles': 'inPartition', 'groupSize': '1048576'}, format="json")
这里groupSize
是可定制的,您可以根据需要进行更改。
同时glueContext.read.json
一般用于读取某个位置的特定文件。
因此,在您的情况下,可能会glueContext.read.json
在读取时丢失一些数据分区。这就是两个数据帧的大小和行存在差异的原因。
推荐阅读
- keras - 奇形图像的卷积层
- jquery - 仅选择具有类名的选项
- reactjs - 为什么 reducer 能够访问最新的道具?
- ruby-on-rails - 用于测试两个不同列中的日期的 ActiveRecord 语法 Rails
- tensorflow - keras.backend 和 Tensorflow 的函数有什么区别
- spring - 使用 @Scheduled 注释的 Spring cron 不会从属性文件中获取表达式
- php - 如何使 GCP 实例使用 PHP 7.2 而不是 7.0
- c++ - 有条件地将函数成员添加到模板类
- flutter - 如何更新 android studio 的 gradle?
- r - 使用 data.table 在 r 中分配最佳响应