【发布时间】:2020-02-06 20:26:12
【问题描述】:
当我们创建一个 spark 数据帧时,我们将数据帧中的数据发送到 Kudu 和 Kafka(依次被拾取并进入 S3)
但是,一旦数据帧被更新,我们在 Kudu 中看到的精度是 1e-15
现在,如果我使用相同的数据帧并将其转换为 Kafka 可以使用的格式
override def getKafkaDataFrame(df: DataFrame) : DataFrame = {
df.withColumn("key", to_json(struct(df.col(PK1),
df.col(PK2)))
.withColumn("value", to_json(struct(df.columns.map(col): _*)))
然后(在单独的应用程序中)发送到 S3
对于 1e-6 的同一行,结果是这样的
我们还有一种方法可以直接从 Kudu 到 S3(不是流),当 inferSchema 设置为 true 时,精度与 Kudu 匹配,然后是一个简单的 dataframe.write
我想知道这种精度/规模损失是从哪里来的,我该如何解决它。
尝试了什么: 将所有字段转换为字符串, 仅将浮点字段转换为双精度数
谢谢
【问题讨论】:
标签: json scala dataframe apache-spark precision