在使用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.???
   ....
}

我该如何解决这个问题?

#1楼 票数:4 已采纳

我在sql()调用返回的SchemaRDD (Spark 1.2.0或更早版本)或DataFrame (Spark 1.3.0 printSchema()上调用printSchema()来检查你得到了什么 - 这是一个很好的技术你对架构感到困惑。 (这取决于数据库连接器的实现,以决定如何映射类型。)最可能的选项是BinaryType ,它看起来像:

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

在这种情况下,您应该能够使用它来提取它

row.getAs[Array[Byte]](1) 

#2楼 票数:0

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

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

  ask by ovnia translate from so

未解决问题?本站智能推荐:

1回复

java.lang.RuntimeException: 不支持的文字类型类 org.apache.spark.sql.Dataset /Spark - JAVA

我有以下代码: 当我运行时,它抛出一个异常: 有任何想法吗 ? 谢谢
1回复

如何将org.apache.spark.sql.Column类型转换为String数据类型

已关闭。 这个问题需要细节或说明。 它当前不接受答案。 想
5回复

从 SQL 查询创建 Spark 数据帧

我确定这是一个简单的 SQLContext 问题,但我在 Spark 文档或 Stackoverflow 中找不到任何答案 我想从 MySQL 上的 SQL 查询创建一个 Spark 数据帧 例如,我有一个复杂的 MySQL 查询,如 我想要一个包含 X、Y 和 Z 列的数据框 我想出了如何将整
1回复

SQL查询/ Spark数据帧到外部联接并减去两个表的值

我希望基于“名称”对两个表A和B进行外部联接,然后减去“计数”列的值,如果该行在另一个表中不存在,则将其替换为0。 有谁知道一个简单的SQL查询使之成为可能? 谢谢! (或者,如果有一种方法可以通过Spark DataFrames做到这一点,那就更好了!)
1回复

线程“main” org.apache.spark.sql.catalyst.parser.ParseException 中的异常

我有以下数据框: 另一个数据框: 我想要以下输出: 我正在使用以下代码从 ID_2 == ID 的第二个dataframe行中进行选择。 但我得到以下异常: 我怎样才能解决这个问题?
1回复

线程“主” org.apache.spark.sql.AnalysisException中的异常:无法解决

我有一个Java方法,该方法返回Dataset<Row> 。 我想将其转换为Dataset<Object> ,其中对象名为StatusChangeDB。 我创建了一个POJO StatusChangeDB.java,并使用mySQL表中找到的所有查询对象对其进行了编码
1回复

线程“main”org.apache.spark.sql.AnalysisException 中的异常:由于数据类型不匹配,无法解析“named_struct()”:

我运行了 spark 应用程序,在其中我加入了两个数据集并形成了一个数据集,并使用编码器将Dataset<Row>转换为Dataset<T > 格式。 编码器如下所示: 在对数据集进行地图操作后,我收到如下错误: 错误日志
1回复

如何分配从 SQL 获得的特定结果可以设置为 spark/Python 中的变量

假设我有一个来自SQL脚本的值,我通过Spark.SQL O/P- 我想将2020-06-08设置为变量并将其传递给 Python 脚本。