写入 Parquet 时如何处理 Money 数据类型

How to handle Money data type when writing to Parquet

我一直在尝试从 sql 服务器获取数据,加载到数据框,然后写入镶木地板(后来我加载到 BigQuery 或其他来源)。 我在货币数据类型方面遇到了一些问题,例如 sql 服务器中的数据:

100,000

但在写入镶木地板后,它会转换为:

100

(因为数据量大,我无法下载到本地确定,但也许write.parquet把钱换成int,请指正)。

这是我的部分脚本:

df = spark.read.format("jdbc") \
    .option("url", "jdbc:sqlserver://{myIP}:1433;instanceName={myInstance};database={myDB};") \
    .option("dbtable", table_source) \
    .option("user", user_source) \
    .option("password", password_source) \
    .option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") \
    .load()

df.write.parquet("gs://output/sample.parquet")

我应该为每列指定一个方案吗?或者有更好的方法吗?

我认为这是因为 , 字符被视为小数点。你能确认SQL服务器中的数据类型是数字吗?

如果 SQL 服务器中的类型是数字,那么您可以尝试手动删除 , 并在写入 parquet 之前转换为双精度或字符串。如果它不是数字那么无论如何你都必须进行转换。