当前位置:  开发笔记 > 编程语言 > 正文

将函数应用于Spark DataFrame的每一行

如何解决《将函数应用于SparkDataFrame的每一行》经验,为你挑选了1个好方法。

我在Spark 1.3上.

我想将一个函数应用于数据帧的每一行.此函数散列行的每一列并返回散列列表.

dataframe.map(row => row.toSeq.map(col => col.hashCode))

运行此代码时出现NullPointerException.我认为这与SPARK-5063有关.

如果不使用嵌套映射,我无法想到实现相同结果的方法.



1> Josh Rosen..:

这不是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))

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有