我在Spark 1.3上.
我想将一个函数应用于数据帧的每一行.此函数散列行的每一列并返回散列列表.
dataframe.map(row => row.toSeq.map(col => col.hashCode))
运行此代码时出现NullPointerException.我认为这与SPARK-5063有关.
如果不使用嵌套映射,我无法想到实现相同结果的方法.
这不是SPARK-5063的一个实例,因为你没有嵌套RDD转换; 内部.map()
被应用于Scala Seq
,而不是RDD.
我的预感是数据集中的某些行包含空列值,因此col.hashCode
当您尝试评估时,某些调用会抛出NullPointerExceptions null.hashCode
.为了解决这个问题,您需要在计算哈希码时考虑空值.
如果您在Java 7 JVM或更高版本(源代码)上运行,则可以执行此操作
import java.util.Objects dataframe.map(row => row.toSeq.map(col => Objects.hashCode(col)))
或者,在早期版本的Java上,您可以这样做
dataframe.map(row => row.toSeq.map(col => if (col == null) 0 else col.hashCode))