火花 SQL:改变 TABLE 改变
Spark SQL: ALTER TABLE CHANGE
我想将一些表导入到(目前)不支持大于 18 的小数精度的数据库中。所以我在 Spark 中像这样尝试 ALTER TABLE 来降低精度。如何四舍五入并不重要。
rt_rel_acc_acc.saveAsTable("rt_rel_acc_acc", SaveMode.Overwrite)
hiveContext.sql("ALTER TABLE rt_rel_acc_acc CHANGE REL001 REL001 decimal(18, 9)")
hiveContext.read.table("rt_rel_acc_acc").write.jdbc(url, "rt_rel_acc_acc", properties)
但是 Spark 似乎根本没有应用更改,因为在第三行抛出了异常:
PSQLException: ERROR: invalid numeric size '30,15'
ALTER TABLE 另一方面,x RENAME TO y 立即应用。
知道吗,我的方法有什么问题?
您可以转换 Dataframe 中的任何列。就像下面一样。
val df2 = df.withColumn("New_Column_Name",
df.col("Actual_Column_name").cast("Decimal(18, 9)"))
在这种情况下,您将同时拥有旧列名和新列名。您可以删除或 select 列,然后应用 saveAsTable 或将其用于其他表。
如果可行,请告诉我。如果我对问题的理解有误,我很乐意根据您的回答尝试其他解决方案。
谢谢,
问候,
斯里尼
我想将一些表导入到(目前)不支持大于 18 的小数精度的数据库中。所以我在 Spark 中像这样尝试 ALTER TABLE 来降低精度。如何四舍五入并不重要。
rt_rel_acc_acc.saveAsTable("rt_rel_acc_acc", SaveMode.Overwrite)
hiveContext.sql("ALTER TABLE rt_rel_acc_acc CHANGE REL001 REL001 decimal(18, 9)")
hiveContext.read.table("rt_rel_acc_acc").write.jdbc(url, "rt_rel_acc_acc", properties)
但是 Spark 似乎根本没有应用更改,因为在第三行抛出了异常:
PSQLException: ERROR: invalid numeric size '30,15'
ALTER TABLE 另一方面,x RENAME TO y 立即应用。
知道吗,我的方法有什么问题?
您可以转换 Dataframe 中的任何列。就像下面一样。
val df2 = df.withColumn("New_Column_Name",
df.col("Actual_Column_name").cast("Decimal(18, 9)"))
在这种情况下,您将同时拥有旧列名和新列名。您可以删除或 select 列,然后应用 saveAsTable 或将其用于其他表。
如果可行,请告诉我。如果我对问题的理解有误,我很乐意根据您的回答尝试其他解决方案。
谢谢, 问候, 斯里尼