Apache Spark SQL BLOB 数据类型

Apache Spark SQL BLOB datatype

在使用 Apache Spark 进行编程实施时,我在处理具有 BLOB 数据类型的 table 时遇到了问题。

document_id | content
          2   0x123sa..
        ......

org.apache.spark.sql.Row 提供对不同 sql 数据类型的支持,但我还没有找到 BLOB 类型:

sqlContext.sql("SELECT * FROM DOCUMENTS").map(row -> {
   String documentName = row.getString(0);
   Blob documentContents = row.???
   ....
}

我该如何解决这个问题?

我会在 SchemaRDD(Spark 1.2.0 或更早版本)或 sql() 调用返回的 DataFrame(Spark 1.3.0)上调用 printSchema()检查您得到的是什么——当您对架构感到困惑时可以使用的好方法。 (由数据库连接器的实现来决定如何映射类型。)最有可能的选项是 BinaryType,它看起来像:

root
 |-- document_id string (nullable = ...)
 |-- content binary (nullable = ...)

在这种情况下,您应该可以使用

提取它
row.getAs[Array[Byte]](1) 

在 spark2 中,我通过使用 Java byte [] 获得它,如下所示:

byte[] fileContent = (byte[]) r.get(0);