【发布时间】:2018-12-24 11:04:00
【问题描述】:
我正在尝试使用 spark 读取 Greenplum 数据库上的 RDBMS 表。我有以下列:
val allColumnsSeq: Seq[String] = Seq("usd_exchange_rate", "usd_exchange_rate::character varying as usd_exchange_rate_text")
我正在尝试将 spark 中的上述列读取为:
val yearDF = spark.read.format("io.pivotal.greenplum.spark.GreenplumRelationProvider").option("url", connectionUrl)
.option("dbtable", "x_lines")
.option("dbschema","copydb")
.option("user", devUserName).option("password", devPassword)
.option("partitionColumn","id")
.load()
.where("year=2017 and month=12")
.select(allColumnsSeq map col:_*)
.withColumn(flagCol, lit(0))
gp 中的某些列是数据类型:decimal,其中包含精度数字。 上表中为:
usd_exchange_rate
它包含近 45 位精度。在我们的项目中,我们保留原始列(usd_exchange_rate),并从字符数据类型的 usd_exchange_rate 创建一个新列,其列名附加_text。在这种情况下,
decimal datatype: usd_exchange_rate & char datatype: usd_exchange_rate_text 中的同一列
当我执行上述行时,我得到了异常:
org.apache.spark.sql.AnalysisException: cannot resolve '`usd_exchange_rate::character varying as usd_exchange_rate_text`'
我发现我将其转换为错误的格式,但我不明白如何一步读取十进制和文本格式的同一列。 谁能告诉我是否有办法在 spark 中实现它?
【问题讨论】:
-
鉴于limitations of connector,看起来您将在源代码中创建一个视图,然后从那里读取(当然,除非您想切换到内置的 JDBC 源代码)。