当前位置: 首页 > 知识库问答 >
问题:

尝试在Spark中将Blob转换为多列

颛孙星海
2023-03-14

我有一个序列化的blob和一个将其转换为java映射的函数。我已将函数注册为UDF,并尝试在Spark SQL中使用它,如下所示:

sqlCtx.udf.register("blobToMap", Utils.blobToMap)
val df = sqlCtx.sql(""" SELECT mp['c1'] as c1, mp['c2'] as c2 FROM
                        (SELECT *, blobToMap(payload) AS mp FROM t1) a """)

我确实成功地做到了,但出于某种原因,非常重的<code>blobToMap

我怎么能强迫Spark做合理的事?我试着分成两个阶段。唯一有效的方法是缓存内部选择——但这也不可行,因为它实在是一个大blob,而我只需要其中的几十个字段。

共有1个答案

饶元章
2023-03-14

我会回答自己,希望它能帮助任何人…所以经过几十次实验,我能够强制火花评估udf并将其转换为Map一次,而不是通过拆分查询并做一个邪恶丑陋的把戏来一遍又一遍地重新计算每个关键请求-将其转换为Ti RDD并返回DataFrame:

val df1 = sqlCtx.sql("SELECT *, blobToMap(payload) AS mp FROM t1")
sqlCtx.createDataFrame(df.rdd, df.schema).registerTempTable("t1_with_mp")
val final_df = sqlCtx.sql("SELECT mp['c1'] as c1, mp['c2'] as c2 FROM t1_with_mp")
 类似资料:
  • 问题内容: 这是我要对字符串进行编码的代码片段: 该带注释的部分有效,当由此生成的URL设置为img src时,它将显示图像: 问题在于下面的代码,生成的源变量为null 更新: 有没有更简单的方法可以使用JQuery做到这一点,从而能够从Blob文件中创建Base64字符串,如上面的代码所示? 问题答案: 将文档 编码为base64

  • 我在S3有一些遗留数据,我想使用Spark 2和Java API将它们转换成parquet格式。 我有所需的Avro模式(. avsc文件)及其使用Avro编译器生成的Java类,我想使用这些模式以Parque格式存储数据。输入数据不是任何标准格式,但我有一个库,可以将遗留文件中的每一行转换为Avro类。 是否可以将数据作为

  • 问题内容: 我正在尝试在Swift应用中使用Firebase时间戳。我想将它们存储在Firebase中,并将其用作应用程序中的本机NSDate对象。 文档说他们是Unix时代,所以我尝试了: 没有运气。 这个: 退货 根据调试器。传递这些时间戳的最佳方法是什么? 问题答案: 与在Firebase中设置普通数据有些不同。它实际上没有提供时间戳。而是提供一个值,该值告诉Firebase服务器用时间填写

  • 问题内容: 我需要将图像上传到NodeJS服务器到某个目录。我正在为此使用节点模块。 我使用以下代码将图片转换为Blob: 我需要一种将Blob转换为文件以上传图像的方法。 有人可以帮我吗? 问题答案: 此函数将a转换为a ,对我来说效果很好。 香草JavaScript TypeScript (具有正确的键入) 用法

  • 我需要上传一个图像到NodeJS服务器到一些目录。我使用的节点模块。 我拥有图像的,我使用以下代码将其转换为blob: 我需要一种方法来将blob转换为文件以上载图像。 有人能帮我吗?

  • 我有一些带有小端编码字节的文件,我想取字节,指定endianess并使用python(任何版本)将它们转换为十进制数。如何正确执行?