这在pyspark中,其中r_parsed是RDD,
r_parsed = r_parsed.map(lambda x: ([k for k in x.keys()][:3]))
x = r_parsed.collect()[666]
print(x)
['is_quote_status', 'place', 'in_reply_to_user_id']
但是之后..
r_parsed = r_parsed.map(lambda x: ([k for k in x.keys()][1]))
x = r_parsed.collect()[666]
Py4JJavaError:调用z:org.apache.spark.api.python.PythonRDD.collectAndServe时发生错误 . :org.apache.spark.SparkException:作业因阶段失败而中止:阶段120.0中的任务1失败1次,最近失败:阶段120.0中失去的任务1.0(TID 241,localhost, Actuator 驱动程序):org.apache.spark .api.python.PythonException:Traceback(最近一次调用最后一次):文件“/home/filipe/anaconda3/lib/python3.5/site-packages/pyspark/python/lib/pyspark.zip/pyspark/worker.py” ,第229行,在主进程()文件“/home/filipe/anaconda3/lib/python3.5/site-packages/pyspark/python/lib/pyspark.zip/pyspark/worker.py”,第224行,正在处理中serializer.dump_stream(func(split_index,iterator),outfile)文件“/home/filipe/anaconda3/lib/python3.5/site-packages/pyspark/python/lib/pyspark.zip/pyspark/serializers.py”,line 372,在dump_stream vs = list(itertools.islice(iterator,batch))文件“”,第5行,在IndexError中:列表索引超出范围
这是什么巫术?为什么我可以映射列表切片,而不是列表索引?
1 回答
这是因为切片语法可以处理列表的长度小于切片长度的情况 .
例如:
但是,索引不是宽容的:
在
rdd
中的某个位置,您有一行其中键的长度小于2 .您可能想先过滤:
或者将逻辑构建到map函数中: