如何从在HDInsight上运行的Apache Spark读取Azure表存储数据

时间:2015-08-14 00:21:18

标签: azure apache-spark azure-storage hdinsight

是否可以通过Azure HDInsight上运行的Spark应用程序执行此操作?我们正在使用Scala。

支持Azure Blob(通过WASB)。我不明白为什么Azure Tables不是。

提前致谢

2 个答案:

答案 0 :(得分:5)

你实际上可以从Spark中的Table Storage中读取,这是一个由微软人员完成的项目:

  

https://github.com/mooso/azure-tables-hadoop

您可能不会需要所有Hive内容,只需要根级别的类:

  • AzureTableConfiguration.java
  • AzureTableInputFormat.java
  • AzureTableInputSplit.java
  • AzureTablePartitioner.java
  • AzureTableRecordReader.java
  • BaseAzureTablePartitioner.java
  • DefaultTablePartitioner.java
  • PartitionInputSplit.java
  • WritableEntity.java

您可以阅读以下内容:

import org.apache.hadoop.conf.Configuration

sparkContext.newAPIHadoopRDD(getTableConfig(tableName,account,key),
                                                classOf[AzureTableInputFormat],
                                                classOf[Text],
                                                classOf[WritableEntity])

def getTableConfig(tableName : String, account : String, key : String): Configuration = {
    val configuration = new Configuration()
    configuration.set("azure.table.name", tableName)
    configuration.set("azure.table.account.uri", account)
    configuration.set("azure.table.storage.key", key)
    configuration
  }

您必须编写解码函数,将WritableEntity转换为您想要的类。

它对我有用!

答案 1 :(得分:3)

目前不支持Azure表。只有Azure blob支持Hadoop和Hadoop所需的HDFS接口。火花。