【发布时间】:2023-03-30 15:50:01
【问题描述】:
我有一个包含字符串 json 的 pyspark 数据框。如下所示:
+---------------------------------------------------------------------------+
|col |
+---------------------------------------------------------------------------+
|{"fields":{"list1":[{"list2":[{"list3":[{"type":false}]}]}]}} |
+----------------------------------------------------------------------------+--
我写了udfs尝试解析json然后计算匹配phone的值并返回df中的新列
def item_count(json,type):
count=0
for i in json.get("fields",{}).get("list1",[]):
for j in i.get("list2",[]):
for k in j.get("list3",[]):
count+=k.get("type",None)==type
return count
def item_phone_count(json):
return item_count(json,False)
df2= df\
.withColumn('item_phone_count', (F.udf(lambda j: item_phone_count(json.loads(j)), t.StringType()))('col'))
但我得到了错误:
AttributeError: 'NoneType' object has no attribute 'get'
知道有什么问题吗?
【问题讨论】:
-
看起来
item_count()中的变量之一是None,但无法从您发布的信息中确定是哪一个。请发布完整的错误回溯和 minimal reproducible example 并提供足够的信息,以便其他人可以重现您的错误。 -
@craig 你的意思是在 i、j、k 中,其中一个是没有的?
-
这可能是您所看到的错误的原因。尝试在循环中打印它们,看看其中一个是否为
None。 -
@Craig 如何打印它,因为我是从 pyspark 数据帧调用 udf?
-
@kihhfeue 尝试从您的数据框中获取一些条目并手动将它们放入函数中,看看会发生什么
标签: python json apache-spark dictionary pyspark