从 Azure Blob 容器读取 Parquet 数据,而无需在本地下载

2024-01-07

我正在使用 azure SDK、avro-parquet 和 hadoop 库从 Blob 容器读取 parquet 文件。目前,我正在将文件下载到临时文件,然后创建一个 ParquetReader。

try (InputStream input = blob.openInputStream()) {
                Path tmp = Files.createTempFile("tempFile", ".parquet");

                Files.copy(input, tmp, StandardCopyOption.REPLACE_EXISTING);
                IOUtils.closeQuietly(input);
                InputFile file = HadoopInputFile.fromPath(new org.apache.hadoop.fs.Path(tmp.toFile().getPath()),
                        new Configuration());
                ParquetReader<GenericRecord> reader = AvroParquetReader.<GenericRecord> builder(file).build();

                GenericRecord record;
                while ((record = reader.read()) != null) {
                    recordList.add(record);
                }
            } catch (IOException | StorageException e) {
                log.error(e.getMessage(), e);
            }

我想使用来自 azure blob 项目的 inputStream 读取此文件,而不将其下载到我的计算机上。 S3有这样的方法(从AWS s3存储桶读取镶木地板数据 https://stackoverflow.com/questions/46831273/read-parquet-data-from-aws-s3-bucket),但是 Azure 存在这种可能性吗?


了解如何做到这一点。

 StorageCredentials credentials = new StorageCredentialsAccountAndKey(accountName, accountKey);
 CloudStorageAccount connection = new CloudStorageAccount(credentials, true);
 CloudBlobClient blobClient = connection.createCloudBlobClient();
 CloudBlobContainer container = blobClient.getContainerReference(containerName);

 CloudBlob blob = container.getBlockBlobReference(fileName);

 Configuration config = new Configuration();
 config.set("fs.azure", "org.apache.hadoop.fs.azure.NativeAzureFileSystem");
 config.set("fs.azure.sas.<containerName>.<accountName>.blob.core.windows.net", token);
 URI uri = new URI("wasbs://<containerName>@<accountName>.blob.core.windows.net/" + blob.getName());
 InputFile file = HadoopInputFile.fromPath(new org.apache.hadoop.fs.Path(uri),
                config);
 ParquetReader<GenericRecord> reader = AvroParquetReader.<GenericRecord> builder(file).build();

 GenericRecord record;
 while ((record = reader.read()) != null) {
     System.out.println(record);
 }
 reader.close();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Azure Blob 容器读取 Parquet 数据,而无需在本地下载 的相关文章

随机推荐

  • 无法在 Android 中将位图转换为完美的 Base64 字符串?

    我正在开发一个需要从相机捕获图像的应用程序 捕获后 我必须将位图转换为 Base64 转换为 Base64 后 我必须将该字符串发送到 SERVER 我正在使用以下代码来完成此任务 ByteArrayOutputStream baos ne
  • R 中的温度曲线

    我想在一张图中创建两条温度曲线 我的数据框如下所示 temp lt read table text Time Temp1 Temp2 1 00 00 18 62800 18 54458 2 00 10 18 60025 18 48283 3
  • setInterval() 中的函数立即执行

    我正在制作一个 jquery 应用程序 通过使用 setInterval 在指定的时间间隔后隐藏图像 问题是隐藏图像函数立即执行 没有延迟 document ready function setInterval change 9999999
  • jQuery 检查是否被点击

    element click function 如何检查元素是否被点击 我就是这样做的 function element element click function return 0 if element 0 alert yes else
  • transform.InverseTransformDirection,没有得到正确的输出

    我有一个球体作为玩家 我希望它相对于相机移动 而不是世界 当我沿 Y 轴旋转相机 90 或 270 度并给出输入时 它给出与预期相反的输出 这是我附加到球体的脚本 using System Collections using UnityEn
  • NEAR 上公钥的正确长度和格式是什么

    一些从存储设备生成的公钥是 44 个字符后的ed25519 前缀 总共 52 个 有些是 43 个字符 总共 51 个 这是允许的吗 Is the ed25519 使用公钥时是否需要包含前缀 ed25519 前缀通常是可选的 并且默认应用
  • 对 SSPI 的调用失败,请参阅内部异常 - 无法联系本地安全机构

    我有一个 WPF 应用程序 它使用 SSLStream 连接到服务器并发送 接收一些消息 我的代码很大程度上基于此示例 SslTcpClient https msdn microsoft com en us library system n
  • 我是否需要在所有页面上使用“[ValidateAntiForgeryToken] 和 @Html.AntiForgeryToken()”?

    我所有的项目页面都需要身份验证 通常我不使用 ValidateAntiForgeryToken and Html AntiForgeryToken 在我的控制器和视图上 只有登录页面有它 这些是什么 ValidateAntiForgeryT
  • 如何使用 CSS 将填充应用于换行文本?

    我这里有一个最小的例子 https codepen io cpcpcpcpcpx pen VwZWoyJ https codepen io cpcpcpcpcpx pen VwZWoyJ 包含以下内容 wrapper width 200px
  • 将 Java 字节数组的一部分追加到 StringBuilder

    如何将字节数组的一部分附加到StringBuilderJava下的对象 我有一个函数的片段 它从 InputStream 读取到字节数组中 然后我想将我读到的任何内容附加到 StringBuilder 对象中 byte buffer new
  • 将 JavaScript 变量分配给 JSP 中的 Java 变量

    你好 我正在尝试将 javascript 变量的值分配给 java 变量 但我不知道该怎么做 比如说我有这个 Javascript 在浏览器上运行 而 ja
  • 获取在hidden/shown.bs.collapse上折叠的元素

    我正在开发一个 ASP NET MVC 应用程序 完全由我自己制作 边做边学 我正在制作一个侧边栏菜单 但我一直在尝试制作动画向上 向下箭头 目前 我能得到的最好结果是两个 无箭头都打开hidden bs collapse shown bs
  • 将 UML 模型保存为 XMI 歧义

    我在维基百科上关于XMI的文章中找到了这样一句话 目前不同版本之间存在一些不兼容性 XMI 的建模工具供应商实现 甚至在互换之间 抽象模型数据 我想知道 尽管使用了记录良好的标准 但工具怎么可能不兼容 在浏览了 UML 和 XMI 的文档以
  • 更新条目向数据库添加新条目

    我正在进行 POST 调用以将一朵花添加到数据库中 但如果 if 语句为 true 我想更新另一个表中的记录 如果该声明不正确 它会毫无问题地添加花 但是当我尝试更新时PinkRoseId使用新的 id 它会创建一条新记录而不是更新旧记录
  • 非常大的 mysql 表和报告

    我正在寻找在 MySQL 中处理大型表的选项 在我的数据库中 很少有表的行数超过 1 3 亿 超过 70GB 并且增长速度非常快 出于报告和分析的目的 我必须运行一些聚合函数 尽管有索引 但查询运行速度非常慢 我尝试制作一些包含合并数据的表
  • 使用 Celery 任务中的 SocketIO 进行服务器推送

    我有一个flask我在其中有许多长时间运行的异步任务 小时 的应用程序 与客户沟通这些任务的状态非常重要 I use celery管理后台任务队列 我目前正在尝试通过以下方式从每个后台线程向客户端广播更新socketIO 这可能吗 是否有更
  • 通过 foursquare API 签入时,我没有出现在此处

    不确定这是否与this https stackoverflow com questions 8744750 foursquare api v2 not getting reply for herenow问题 似乎是 但我不能只评论答案 我还
  • 箭头函数不应返回赋值 no-return-assign

    然而 我的代码在应用程序中工作正常 在提交 husky 运行并给出错误 箭头函数不应返回赋值 no return assign 之前
  • 如何在 ASP.NET Core 6 MVC 应用程序中动态添加控制器

    我需要在 ASP NET Core 6 MVC 应用程序中动态创建控制器 我找到了一些方法可以在一定程度上实现这一目标 但并不完全如此 我可以动态添加控制器 但不知何故它仅反映在第二个请求上 所以这就是我所做的 首先我初始化我的控制台应用程
  • 从 Azure Blob 容器读取 Parquet 数据,而无需在本地下载

    我正在使用 azure SDK avro parquet 和 hadoop 库从 Blob 容器读取 parquet 文件 目前 我正在将文件下载到临时文件 然后创建一个 ParquetReader try InputStream inpu