pyspark null类型 在 json.dumps(null) 之后,会变为字符串‘null‘

5 篇文章 0 订阅
文章讲述了在从Hive数仓迁移数据到MySQL时,如何处理null值。当使用to_json函数时,null值会被转换为null字符串。为解决此问题,建议在应用to_json之前,通过if条件判断,使null值保持不变,其他非null值再转换为json字符串。
摘要由CSDN通过智能技术生成

在将 hive 数仓数据写入 MySQL 时候,有时我们需将数据转为 json 字符串,然后再存入 MySQL。但 hive 数仓中的 null 类型遇到 json 函数之后会变为 ‘null’ 字符串,这时我们只需在使用 json 函数之前对值进行判断即可,当值为 null 时,直接返回 null, 当值非null 时,则使用 json 函数

1 正常情况

在 pyspark 中执行如下代码

mysql_result_df= spark.sql("""
	SELECT
	    user_id,
	    null as active_points,
	    '20230405'  as ymd
	FROM tmp.tmp_user"""
export_data_mysql(mysql_result_df)

在这里插入图片描述
将 history_loc_df 数据存入 MySQL,null 数据会为空,如下所示
在这里插入图片描述

2 null 类型变为 ‘null’ 字符串

使用 to_json 函数之后,null 类型会变为 ‘null’ 字符串

def to_json(info):
    return json.dumps(info)
    
# udf 注册: 转为 json
spark.udf.register("to_json", to_json, StringType())

history_loc_df = spark.sql("""
	SELECT
	    user_id,
	    to_json(null) as active_points,
	    '20230405'  as ymd
	FROM tmp.tmp_user"""

export_data_mysql(mysql_result_df)

这时将 history_loc_df 数据存入 MySQL,null 数据会变为字符串,如下所示
在这里插入图片描述

3 在 to_json 之前判断是否为空

若想使用 to_json 函数,当遇到 null 值,返回 null 类型,遇到其它值则转为 json 字符串

只需要在转为 json 字符串之前对值进行判断即可

def to_json(info):
    return json.dumps(info)
    
# udf 注册: 转为 json
spark.udf.register("to_json", to_json, StringType())

mysql_result_df= spark.sql("""
	SELECT
	    user_id,
	    if(active_points is null, null, to_json(null)) as active_points,
	    '20230405'  as ymd
	FROM tmp.tmp_user"""
export_data_mysql(mysql_result_df)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值