我有一个数据帧:yearDF
是通过读取Postgres上的RDBMS表获得的,我需要将其提取到HDFS的Hive表中。
val yearDF = spark.read.format("jdbc").option("url", connectionUrl)
.option("dbtable", s"(${execQuery}) as year2017")
.option("user", devUserName)
.option("password", devPassword)
.option("numPartitions",10)
.load()
在摄取它之前,我必须为其添加一个新列:delete_flag
,其数据类型为:IntegerType
。此列用于标记主键是否在源表中删除该行。
要将新列添加到现有数据框,我知道可以使用以下选项:dataFrame.withColumn("del_flag",someoperation)
,但是没有这样的选项可以指定新列的数据类型。
我将新列的StructType编写为:
val delFlagColumn = StructType(List(StructField("delete_flag", IntegerType, true)))
但是我不明白如何用现有的dataFrame:yearDF
添加此列。谁能让我知道如何向现有dataFrame中添加新列及其数据类型?
答案 0 :(得分:0)
def try_to_int(obj):
try:
return str(int(float(obj)))
except (ValueError, TypeError):
return obj
如果您要传递lit(1),则不需要强制转换,因为spark会为您推断出架构。但是,如果您以lit(“ 1”)的身份传递,则会将其强制转换为Int