apache-spark - Pyspark 中数组元素上的 UDF
问题描述
我有一个如下所示的数据框
col1
------
[{"a":"1","b":"2"},{"a":"11,"b":"22"}]
现在我想使用现有值包含新结构 {"cc": "1" } --> 这里 1 来自 "a": "1"
col1
------
[{"a":"1","b":"2", {"cc": "1" }},{"a":"11,"b":"22",{"cc": "11" } }]
请向我推荐pyspark中的udf,
解决方案
您可以使用转换功能(来自 spark V2.4)来获得所需的结果。
from pyspark.sql import *
from pyspark.sql.functions import *
spark = SparkSession.builder.master('local[*]').getOrCreate()
df = spark.createDataFrame([('[{"a":"1","b":"2"},{"a":"11","b":"22"}]',)],"col1 string")
df.withColumn("col1", from_json("col1", schema_of_json(df.select("col1").first()[0]))).\
selectExpr("to_json(transform(col1, x-> "
"struct(x.a as a, x.b as b, struct(x.a as cc) as cc))) as co1").\
show(truncate=False)
+------------------------------------------------------------------------+
|co1 |
+------------------------------------------------------------------------+
|[{"a":"1","b":"2","cc":{"cc":"1"}},{"a":"11","b":"22","cc":{"cc":"11"}}]|
+------------------------------------------------------------------------+
推荐阅读
- java - 如何将 JAX-RS 过滤器与生成的控制器接口一起使用?(JavaEE、Wildfly18)
- c# - 数据网格视图控件
- python - 如何将用户输入添加到嵌套字典?
- java - 如何使用 openapi-ui 和承载令牌(jwt)在 swagger-ui 中激活授权按钮?
- python - 使用 PyODBC 将自定义类型参数传递给存储过程
- stl - STL 连通性检查
- javascript - 如何根据反应中的唯一ID获取API结构化数据
- tuples - 试图在 OCaml 中创建一个全局变量
- python - 一个问题的美丽汤多个答案
- php - 下载已使用 post 方法提交的文件