【发布时间】:2019-09-23 20:02:27
【问题描述】:
我正在尝试将 spark 数据帧导入 Aurora RDS Postgres。
假设 DF 有 2 列,如下所示: |身份证号|我的Arr >|
我当前的管道包括将数据帧作为 .csv 写入 S3,然后通过 COPY 将该 .csv 插入 Aurora RDS Postgres。
我遇到的问题是我的数据框包含一个 ArrayType(字符串)列。
问题:
- 是否有更好的方法可以完全跳过 S3?或使用类似 .parquet 格式的中介的方法? (postgres 似乎不支持批量插入 parquet 文件的简单方法,这就是我采用当前方法的方式)
- 假设上面的答案是否定的,我知道我可以利用
collect_ws()来连接数组,但输出格式如下:"A,B,C"当我需要它时看起来像这样"{A,B,C}"(其中是 Postgres 理解的 csv 数组格式)。我可以使用 UDF,但我仅限于在 PySpark 中工作,所以我真的更愿意避免使用 UDF,因为这个文件实际上相当大。
【问题讨论】:
-
你仅限于极光吗?您可以写信到
parquet或json以保留架构(因为csv不支持array类型),然后使用athena rds 查询存储在s3中的文件 -
是的,不幸的是,我仅限于 Aurora。相关的是,我收集的那些数组可能相当大(最多 100k 个元素),并且将它们写入 S3(作为 csv 或 parquet)占用了 spark 应用程序总运行时间的 80%。
-
你的数据都是字符串字节,所以这是有道理的
-
我是 spark 新手,为什么字符串数据特别糟糕,性能方面并不明显。有方便的链接或快速解释吗?
-
这不是
spark的事情;基础是java和jvm...不同的数据类型等同于不同的字节大小...spark实际上试图通过tungsten编码器项目来改进这一点
标签: postgresql apache-spark pyspark amazon-emr amazon-aurora