使用Apache Spark编程实现时,我遇到了处理具有BLOB数据类型的表的问题。
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.???
....
}
如何解决问题?
答案 0 :(得分:4)
我在printSchema()
上调用SchemaRDD
(Spark 1.2.0或更早版本)或DataFrame
(Spark 1.3.0)调用sql()
检查你得到了什么 - 当你对架构感到困惑时,这是一种很好的技巧。 (它由数据库连接器的实现决定如何映射类型。)最可能的选项是BinaryType
,它看起来像:
root
|-- document_id string (nullable = ...)
|-- content binary (nullable = ...)
在这种情况下,您应该能够使用
提取它row.getAs[Array[Byte]](1)
答案 1 :(得分:0)
在spark2中,我通过使用Java byte []得到它,如下所示:
byte [] fileContent =(byte [])r.get(0);