【发布时间】:2020-01-25 07:57:19
【问题描述】:
我在 s3 中有源数据,我的 spark/scala 应用程序将读取这些数据并在将其分区到新列 partition_id 后将其写入为 parquet 文件。
partition_id 的值将通过从另一个具有字母数字字符串值的 id 列中获取前两个字符来派生。
例如:
id = 2dedfdg34h, partition_id = 2d
将数据写入s3后,将为每个分区创建单独的分区文件夹,一切看起来都很好。 例如:
PRE partition_id=2d/
PRE partition_id=01/
PRE partition_id=0e/
PRE partition_id=fg/
PRE partition_id=5f/
PRE partition_id=jk/
PRE partition_id=06/
PRE partition_id=07/
但是当我再次将这些 s3 文件读入数据帧时,1d、2d 等值将被转换为 1.0、2.0。
Spark 版本:2.4.0
请就如何避免这种隐式转换提出建议。
用于向/从 s3 写入和读取分区数据的命令:
dataframe.write.partitionBy("partition_id").option("compression", "gzip").parquet(<path>)
spark.read.parquet(<path>)
【问题讨论】:
标签: scala apache-spark amazon-s3 apache-spark-sql parquet