apache-spark - 将功能应用于Spark DataFrame的每一行

标签 apache-spark apache-spark-sql

我使用的是Spark 1.3。

我想将一个函数应用于数据框的每一行。此函数对行的每一列进行哈希处理,并返回哈希表的列表。

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

运行此代码时,我收到NullPointerException。我认为这与SPARK-5063有关。

我想不出不使用嵌套 map 就可以达到相同结果的方法。

最佳答案

这不是SPARK-5063的实例,因为您没有嵌套RDD转换。内部.map()应用于Scala Seq而不是RDD。

我的直觉是数据集中的某些行包含空列值,因此当您尝试评估col.hashCode时,某些null.hashCode调用会引发NullPointerExceptions。为了解决此问题,在计算哈希码时,您需要考虑空值。

如果您在Java 7 JVM或更高版本的JVM(source)上运行,则可以执行

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))

关于apache-spark - 将功能应用于Spark DataFrame的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34426656/

相关文章:

apache-spark - 如何在 PySpark 的分组对象中插入一列?

java - 根据 DataStax Enterprise 的运行时类路径构建 Spark 应用程序

scala - <error> 出现在 sbt doc 生成的文档中

scala - 将行或列转换为数据框

pandas - 将 Spark 数据帧转换为 Pandas/R 数据帧的要求

python - SparkSQL 使用 Python 从 MySQL 数据库表中读取

apache-spark - 如何从 Java String 数组创建 Spark 广播变量?

hadoop - Apache Spark如何实现改组阶段?

java - Spark-Java : Concatenate aggregated groupBy's result

python - PySpark 逐行函数组合