写入 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 之前转换为双精度或字符串。如果它不是数字那么无论如何你都必须进行转换。
我一直在尝试从 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 之前转换为双精度或字符串。如果它不是数字那么无论如何你都必须进行转换。