spark在数组中有一些空值

dldeef67  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(286)

我有以下代码:

myData3 = myData.map(lambda line: line.split(',')).map(lambda fields: ("Column", float(fields[0]))).map(lambda (column, value) : (value)).persist(StorageLevel.MEMORY_AND_DISK)

我把if语句放在那里,因为现在我有一些数据集包含整个列。float(fields[0])Map在遇到任何空值时都会导致错误。如何编写spark代码,让我以数组[1,2,3,4,5,19]为例进行处理?

0tdrvxhp

0tdrvxhp1#

只需在Map之前运行过滤器:

.map(...split...)
.filter(lambda fields: fields[0] != null)
.map(...process...)

如果您真的需要,也可以使用累加器来跟踪过滤出的数据。
对于累加器,它看起来更像(python不是我常用的语言,所以它可能会关闭一点:

accum = sc.accumulator(0)

def filterWithAccum(fields):
  accum.add(1)
  return fields[0] != null

.map(...split...)
.filter(filterWithAccum)
.map(...process...)

相关问题