我想将一些表导入到DB中(目前)不支持大于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立即应用。
任何想法,我的方法有什么问题?
答案 0 :(得分:1)
您可以在Dataframe中投射任何列。就像下面这样。
public interface RecyclerOnItemClickListener {
void onItemClickListener(int itemPosition);
}
在这种情况下,您将拥有旧的和新的列名。您可以删除或选择列,然后应用saveAsTable或将其用于其他表。
如果有效,请告诉我。如果我对这个问题的理解是错误的,我很乐意根据您的回答尝试其他解决方案。
谢谢你, 问候, 作者Srini。