我有一个包含字典的json文件,在其中有各种键值。一个键包含其他键值。
{u'op': u'mcm', u'pt':015, u'mc': [{u'marketDefinition': {u'discountAllowed': False, u'version': 2199687037, u'inPlay': False], u'clk': u'6578852476'}
在我拥有的某些文件中,'marketDefinition'键不存在。因此,我只想在此处读取/计数具有“ marketDefinition”键的文件
我尝试了这段代码,但是由于相关密钥没有出现在某些文件中,因此该代码无法运行
r=sc.binaryFiles("path").mapValues(extractFiles).mapValues(reconvertToJson).flatMapValues(json.loads)
r.values().filter(lambda x: x['mc'] is not None).flatMap(lambda x:
x['mc']).filter(lambda x: x['marketDefinition'] is not None).count()
输出:
Py4JJavaError:调用时发生错误 z:org.apache.spark.api.python.PythonRDD.collectAndServe。 : org.apache.spark.SparkException:由于阶段失败,作业中止了: 94.0阶段中的任务0失败4次,最近一次失败:丢失的任务 在阶段94.0中为0.3(TID 931,ip-172-31-168-121.eu-west-1.compute.internal,执行者5): org.apache.spark.api.python.PythonException:追溯(最新 最后调用):文件 “ /mnt3/yarn/usercache/zeppelin/appcache/application_1563524055689_0001/container_1563524055689_0001_01_000006/pyspark.zip/pyspark/worker.py”, 372行,主要 process()文件“ /mnt3/yarn/usercache/zeppelin/appcache/application_1563524055689_0001/container_1563524055689_0001_01_000006/pyspark.zip/pyspark/worker.py”, 367行,进行中 serializer.dump_stream(func(split_index,iterator),outfile)文件“ /usr/lib/spark/python/lib/pyspark.zip/pyspark/rdd.py”,行 2499,在pipeline_func文件中 “ /usr/lib/spark/python/lib/pyspark.zip/pyspark/rdd.py”,第2499行,在 pipeline_func文件 “ /usr/lib/spark/python/lib/pyspark.zip/pyspark/rdd.py”,第2499行,在 pipeline_func文件 “ /usr/lib/spark/python/lib/pyspark.zip/pyspark/rdd.py”,第352行,在 func文件“ /usr/lib/spark/python/lib/pyspark.zip/pyspark/rdd.py”, 文件中的第1055行 “ /usr/lib/spark/python/lib/pyspark.zip/pyspark/rdd.py”,第1055行,在 文件 “ /mnt3/yarn/usercache/zeppelin/appcache/application_1563524055689_0001/container_1563524055689_0001_01_000006/pyspark.zip/pyspark/util.py”, 包装中的第99行 在KeyError:“ marketDefinition”中,返回f(* args,** kwargs)文件“”的第2行
如何仅使用marketDefinition键读取文件?非常感谢!!