当前位置: 首页 > 面试题库 >

使用Spark从Azure Blob读取数据

东方吕恭
2023-03-14
问题内容

我在通过火花流从天蓝色斑点读取数据时遇到问题

JavaDStream<String> lines = ssc.textFileStream("hdfs://ip:8020/directory");

上面的代码适用于HDFS,但无法从Azure blob读取文件

https://blobstorage.blob.core.windows.net/containerid/folder1/

上面是在azure UI中显示的路径,但是这行不通,我是否丢失了某些内容,以及如何访问它。

我知道Eventhub是流数据的理想选择,但是我目前的情况要求使用存储而不是队列


问题答案:

为了从Blob存储中读取数据,需要完成两件事。首先,您需要告诉Spark在基础Hadoop配置中使用哪个本机文件系统。这意味着您还需要在类路径中使用Hadoop-
Azure JAR
(请注意,与Hadoop系列相关的更多JAR可能对运行时有要求):

JavaSparkContext ct = new JavaSparkContext();
Configuration config = ct.hadoopConfiguration();
config.set("fs.azure", "org.apache.hadoop.fs.azure.NativeAzureFileSystem");
config.set("fs.azure.account.key.youraccount.blob.core.windows.net", "yourkey");

现在,使用wasb://前缀调用文件(注意,[s]用于可选的安全连接):

ssc.textFileStream("wasb[s]://<BlobStorageContainerName>@<StorageAccountName>.blob.core.windows.net/<path>");

不用说,您需要从进行查询的位置到Blob存储设置适当的权限。



 类似资料:
  • 问题内容: 是否可以将数据从Microsoft Sql Server(以及oracle,mysql等)读取到Spark应用程序中的rdd中?还是我们需要创建一个内存中的集合并将其并行化为RDD? 问题答案: 从邮件列表中找到了解决方案。可以使用JdbcRDD完成此操作。我需要获取MS Sql Server JDBC驱动程序jar并将其添加到项目的lib中。我想使用集成安全性,因此需要将sqljdb

  • 我试图从mysql读取数据,并将其写回s3中的parquet文件,具体分区如下: 我的问题是,它只打开一个到mysql的连接(而不是4个),并且在从mysql获取所有数据之前,它不会写入parquert,因为mysql中的表很大(100M行),进程在OutOfMemory上失败。 有没有办法将Spark配置为打开多个到mysql的连接并将部分数据写入镶木地板?

  • 我正在通过Spark使用以下命令读取csv文件。 我需要创建一个Spark DataFrame。 我使用以下方法将此rdd转换为spark df: 但是在将rdd转换为df时,我需要指定df的模式。我试着这样做:(我只有两列文件和消息) 然而,我得到了一个错误:java。lang.IllegalStateException:输入行没有架构所需的预期值数。需要2个字段,但提供1个值。 我还尝试使用以

  • 我试图使用spark streaming api从kafka读取json数据,当我这样做时,它会抛出java.lang.nosuchmethoderror:net.jpountz.lz4.lz4BlockinPutStream.init异常。堆栈跟踪是-

  • 我们可以使用以下命令轻松地从 Spark 中的 Hive 表中读取记录: 但是当我连接两个表时,例如: 如何从上面的连接查询中检索记录?

  • 我是spark的新手,正在尝试使用java将avro数据加载到spark“dataset”(spark 1.6)。我在scala中看到了一些示例,但在java中没有看到。任何指向java示例的指针都会很有帮助。我试图创建一个javaRDD,然后将其转换为“dataset”。我相信一定有一条直截了当的路。