hive某张表中sex列的值有:"男","女","F","M",4个不同的值,动态从mysql数据库中获取sex列的值对应的标准值,用spark2.4根据获取的标准值将sex列原来的值转化为标准值,并把转化后的数据全部存入另外一张表汇中
时间: 2023-07-21 14:45:58 浏览: 80
可以使用Spark DataFrame的`join`函数和`withColumn`函数来实现:
```
# 读取原始表格
df = spark.read.table("原始表格")
# 从MySQL数据库中获取sex列的标准值
standard_df = spark.read.format("jdbc").options(
url="jdbc:mysql://<host>:<port>/<database>",
driver="com.mysql.jdbc.Driver",
dbtable="<table>",
user="<username>",
password="<password>"
).load()
# 将原始表格和标准表格进行join
df = df.join(standard_df, df.sex == standard_df.sex_ori, "left_outer")
# 使用withColumn函数将sex列中的不同值转化为标准值
df = df.withColumn("sex_std", when(df.sex_ori.isNull(), df.sex).otherwise(df.sex_std))
# 存储转化后的数据到另外一张表中
df.write.mode("overwrite").saveAsTable("另外一张表")
```
在上述代码中,我们首先使用`spark.read.table`函数读取原始表格,并使用`spark.read.format("jdbc")`函数从MySQL数据库中获取sex列的标准值。然后,我们使用`join`函数将原始表格和标准表格进行join操作,得到一个包含`sex_ori`和`sex_std`两列的DataFrame。其中,`sex_ori`列为原始表格中的`sex`列,`sex_std`列为从标准表格中获取的对应标准值。接下来,我们使用`when`函数将`sex`列中的不同值转化为标准值,并使用`withColumn`函数添加一列`sex_std`来存储转化后的值。最后,我们使用`write`函数将转化后的数据存入另外一张表中。请注意在`options`中替换MySQL数据库的相关信息。
阅读全文