将函数应用于 Spark DataFrame 的每一行
Apply function to each row of Spark DataFrame
我正在使用 Spark 1.3。
我想对数据框的每一行应用一个函数。此函数对行的每一列进行哈希处理,并 returns 哈希列表。
dataframe.map(row => row.toSeq.map(col => col.hashCode))
当我 运行 这段代码时,我得到一个 NullPointerException。我认为这与 SPARK-5063.
有关
我想不出不使用嵌套地图就能达到相同结果的方法。
这不是 SPARK-5063 的实例,因为您没有嵌套 RDD 转换;内部 .map()
被应用于 Scala Seq
,而不是 RDD。
我的预感是数据集中的某些行包含空列值,因此当您尝试计算 null.hashCode
时,某些 col.hashCode
调用会抛出 NullPointerExceptions。为了解决这个问题,您需要在计算哈希码时考虑空值。
如果您 运行 在 Java 7 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))
我正在使用 Spark 1.3。
我想对数据框的每一行应用一个函数。此函数对行的每一列进行哈希处理,并 returns 哈希列表。
dataframe.map(row => row.toSeq.map(col => col.hashCode))
当我 运行 这段代码时,我得到一个 NullPointerException。我认为这与 SPARK-5063.
有关我想不出不使用嵌套地图就能达到相同结果的方法。
这不是 SPARK-5063 的实例,因为您没有嵌套 RDD 转换;内部 .map()
被应用于 Scala Seq
,而不是 RDD。
我的预感是数据集中的某些行包含空列值,因此当您尝试计算 null.hashCode
时,某些 col.hashCode
调用会抛出 NullPointerExceptions。为了解决这个问题,您需要在计算哈希码时考虑空值。
如果您 运行 在 Java 7 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))