首页 > 解决方案 > 如何将数据帧的每一列从二进制转换为字节数组

问题描述

我有一个具有以下架构的数据集 ds1

root
 |-- binary_col1: binary (nullable = true)

我根据需要使用

val ds2 = ds1.map(row => row.getAs[Array[Byte]]("binary_col1"))

但是,当数据集有两列二进制类型时,如何转换数据集?

root
 |-- binary_col1: binary (nullable = true)
  -- binary_col2: binary (nullable = false)

我想创建具有 2 列的新数据集
( binary_col1.toByteArray , binary_col2.toByteArray)

标签: scaladataframeapache-sparkapache-spark-dataset

解决方案


您可以as在数据框/数据集上使用,并提供 tuple2 类型:

val ds2 = ds1.as[(Array[Byte], Array[Byte])]

这比使用更好,map因为它保留了列名。

当然,你也可以使用map,例如

val ds2 = ds1.map(row => (row.getAs[Array[Byte]]("binary_col1"), row.getAs[Array[Byte]]("binary_col2")))

推荐阅读