apache-spark - 从Greenplum读取数据时,如何在火花中将十进制值转换为字符串?
问题描述
我正在尝试使用 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 中实现它?
解决方案
不确定错误,但是要转换,您是否尝试定义自定义架构?假设您已经知道您的架构,请使用 StructType 定义您自己的自定义架构。
import org.apache.spark.sql.types._
val customSchema = StructType(Seq(
StructField("usd_exchange_rate",StringType,true),
StructField("aud_exchange_rate",StringType,true),
.
.
.
StructField("<some field>",<data type>,<Boolean for nullable>)
))
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")
.schema(customSchema)
.load()
.where("year=2017 and month=12")
.select(allColumnsSeq map col:_*)
.withColumn(flagCol, lit(0))
我没有在 IDE 中对此进行测试,但它应该可以工作。
推荐阅读
- javascript - 如何在整个文档中搜索特定单词及其前一个单词(在 java 脚本中)
- npm - 如何在 npmjs 上取消发布节点模块?
- powershell - 从远程系统运行 Get-PSDrive 时的 AUDIT_FAILURE
- xslt-2.0 - XML 到 CSV(使用输入日期生成新日期)
- javascript - 如何取消嘲笑要求?
- selenium - 在测试套件中运行特定测试 - Selenium Side Runner (IDE)
- c# - 集合和迭代器的 C# 性能
- amazon-web-services - 在 AWS EKS 中将 IAM 组添加到 aws-auth configmap
- android - 如何在 Kotlin Native 中使用 kotlin.system?
- python - 字节数组转换,python3上需要整数错误