我正在尝试将rdbms表摄取到hive中。我通过以下方式获得Dataframe:
val yearDF = spark.read.format("jdbc").option("url", connectionUrl)
.option("dbtable", "(select * from schema.tablename where source_system_name='DB2' and period_year='2017') as year2017")
.option("user", devUserName)
.option("password", devPassword)
.option("numPartitions",15)
.load()
以下是Dataframe的列:
geography:string|
project:string|
reference_code:string
product_line:string
book_type:string
cc_region:string
cc_channel:string
cc_function:string
pl_market:string
ptd_balance:double
qtd_balance:double
ytd_balance:double
xx_last_update_tms:timestamp
xx_last_update_log_id:int
xx_data_hash_code:string
xx_data_hash_id:bigint
列 ptd_balance, qtd_balance, ytd_balance
是双精度列的数据类型。我们的项目希望通过创建新列将其数据类型从double转换为string: ptd_balance_text, qtd_balance_text, ytd_balance_text
以避免任何数据截断。 withColumn
将在Dataframe中创建一个新列。 withColumnRenamed
将重命名现有列。
Dataframe有近1000万条记录。有没有一种有效的方法来创建多个新列,这些列的数据相同,类型不同于Dataframe中现有的列?
2条答案
按热度按时间ctehm74n1#
如果我是你的话,我会在提取查询中做一些更改,或者让bi团队做一些努力:p在提取时动态添加和强制转换字段,但是你所要求的任何方式都是可能的。
您可以从现有列中添加列,如下所示。检查
addColsTosampleDF
dataframe
. 我希望下面的评论将足以理解,如果你有任何问题,请随时添加在评论,我会编辑我的答案。bxjv4tth2#
你可以这样做
query
从所有columns
就像下面一样