使用Spark 1.5,当我调用.count(),. top(),. take(x)
时,我继续使索引超出范围lateWest = westBound.filter(lambda line: line.split(',')[16] > 0)
print(type(lateWest))<class 'pyspark.rdd.PipelinedRDD'>
lateWest.count()
lateWest.first()
lateWest.take(3)
为什么我收到此错误的任何想法。我猜是因为第一个命令导致lateWest为空。但是如何检查它是否为空?
答案 0 :(得分:1)
Spark使用名为lazy evaluation的概念进行操作。因此,当您运行第一行时,系统实际上并没有运行您的lambda函数,它只是将它存储在spark对象中。当您调用count()
函数时,spark会在您的过滤器中运行lambda函数。那就是错误实际发生的地方。换句话说,您的错误告诉您至少有一个输入行没有16个逗号。