我们正在从红移移到星火。我有一个红移的表需要导出到s3。从s3,这将被馈送到apachespark(emr)。
我发现只有一种方法可以从红移中导出数据。那就是 UNLOAD
命令。卸载不能导出类型化数据。它导出csv,csv是一个字符串表。基于不同的格式(引号、分隔符等),spark似乎不能很好地识别它。所以我正在寻找一种方法来卸载它们,并确保它们是由spark以正确的类型读取的。
有没有什么方法可以将数据作为json或其他类型化格式卸载到spark中?
我们正在从红移移到星火。我有一个红移的表需要导出到s3。从s3,这将被馈送到apachespark(emr)。
我发现只有一种方法可以从红移中导出数据。那就是 UNLOAD
命令。卸载不能导出类型化数据。它导出csv,csv是一个字符串表。基于不同的格式(引号、分隔符等),spark似乎不能很好地识别它。所以我正在寻找一种方法来卸载它们,并确保它们是由spark以正确的类型读取的。
有没有什么方法可以将数据作为json或其他类型化格式卸载到spark中?
3条答案
按热度按时间8gsdolmq1#
最后我用字符串连接手动构建了json,
在这里,
nvl
函数用于替换空值convert
用于将布尔值替换为int||
是红移中的连接运算符chr
用于生成{
以及}
性格这个操作不如csv卸载那么快。这需要2-3倍的时间。但我们需要做一次,这很好。我卸载了大约16亿条记录,并在spark中成功导入了所有这些记录。
注意:通过spark解析json不是有效的方法。还有其他更快的格式,如Parquet文件,序列文件。所以对于spark来说,这可能不是一条正确的道路。但是对于作为json卸载,您可以使用这个解决方案。
11dmarpk2#
因为redshift是基于postgresql的rdbms;提取到json可能不是一种简单的方法。在运行unload命令(输出“csv”)之后,可以将该csv转换为json格式
以下是github项目:https://github.com/darwin/csv2json
如果需要基于命令的工具:https://www.npmjs.com/package/csvtojson
qcuzuvrc3#
查看
spark-redshift
库,它的设计允许apachespark使用UNLOAD
; 它自动管理转义和模式处理。您可以直接对从redshift加载的数据运行spark查询,也可以将redshift数据保存为类型化格式(如parquet),然后查询该数据。
完全公开:我是那个库的主要维护者。