我有一个架构的框架
StructType(
[
StructField('product_id', IntegerType(), True),
StructField('tenant_id', IntegerType(), True),
StructField("materials", ArrayType(StructType([
StructField('id', IntegerType(), True),
StructField('percentage', FloatType(), True)]
))),
StructField("elastic", ArrayType(StructType([
StructField('id', IntegerType(), True),
StructField('name', MapType(StringType(), StringType()), True)
])))
])
字符串
我想合并这两个结构体,以便有一个新的3个字段,id,百分比和名称,其中materials.id = elastic.id喜欢:
StructType(
[
StructField('product_id', IntegerType(), True),
StructField('tenant_id', IntegerType(), True),
StructField("materials", ArrayType(StructType([
StructField('id', IntegerType(), True),
StructField('percentage', FloatType(), True),
StructField('name', MapType(StringType(), StringType()), True)]
)))
])
型
基本上,
我想通过这个Before and expected result
我尝试过udf和结果,但在性能方面不是最好的方法。
@udf(returnType=ArrayType(StructType([
StructField("id", IntegerType(), False),
StructField('percentage', FloatType(), True),
StructField('name', MapType(StringType(), StringType()), True)
])))
def expand_list(materials, elastic):
final = []
for k in materials:
for i in elastic:
if k.id == i.id:
final += [{'id': k.id, 'percentage': k.percentage, 'name': i.name}]
return final
型
1条答案
按热度按时间nle07wnf1#
使用transform遍历第一个数组,然后使用filter在第二个数组中查找相应的条目:
字符串
输出量:
型