数据砖读取Azure blob的上次修改日期

时间:2018-12-02 20:59:29

标签: azure-blob-storage azure-databricks

我在我的Databricks hdfs上安装了Azure blob存储。 有没有办法获取数据块中Blob的最后修改日期?

这是我阅读blob内容的方式:

val df = spark.read
  .option("header", "false")
  .option("inferSchema", "false")
  .option("delimiter", ",")
  .csv("/mnt/test/*")

1 个答案:

答案 0 :(得分:0)

通常,有两种方法可以读取Azure Blob最后修改的数据,如下所示。

  1. 通过Azure存储REST API或适用于Java的Azure存储SDK直接阅读。 在研究Azure Blob存储REST API之后,有两个REST API Get BlobGet Blob Properties,它们可以从响应标头中获得Last-Modified属性。因此,您可以在Scala中调用这些api来解析api响应标头来获取它,或者只是在Scala中使用Java的Azure存储SDK来执行相同的操作。

这是我的Java示例代码,用于获取blob的Last-Modified属性。

import java.util.Date;

import com.microsoft.azure.storage.CloudStorageAccount;
import com.microsoft.azure.storage.StorageException;
import com.microsoft.azure.storage.blob.CloudBlob;
import com.microsoft.azure.storage.blob.CloudBlobClient;
import com.microsoft.azure.storage.blob.CloudBlobContainer;

String StorageConnectionStringTemplate = "DefaultEndpointsProtocol=https;" + 
        "DefaultEndpointsProtocol=https;" +
        "AccountName=%s;" +
        "AccountKey=%s";
String accountName = "<your storage account name for HDInsight>";
String accountKey = "<your storage account key for HDInsight>";
String containerName = "<container name for HDFS>";
String blobName = "<blob name>";
String storageConnectionString = String.format(StorageConnectionStringTemplate, accountName, accountKey);
CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString);
CloudBlobClient client = storageAccount.createCloudBlobClient();
CloudBlobContainer container = client.getContainerReference(containerName);
CloudBlob blob = container.getBlobReferenceFromServer(blobName);
Date lastModifiedDate = blob.getProperties().getLastModified();

考虑Hadoop Azure是基于用于Java 8.0.0的Azure存储SDK,而不是最新版本10.0,因此上面的示例代码与the offical tutorial of Azure Blob Storage for Java不同。

如果要获取容器的Last-Modified属性,则可以使用REST API [Get Container Properties][5]或Java代码Date lastModifiedDate = container.getProperties().getLastModified();

  1. wasb://协议使用Hadoop Azure Java API。

    import java.util.Date;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.fs.FileStatus;
    
    Configuration conf = new Configuration();
    FileSystem hdfs = FileSystem.get(conf);
    Path f = new Path("<blob path on HDFS>");
    FileStatus fileStatus = hdfs.getFileStatus(f);
    long lastModifiedTime = f.getModificationTime();
    Date lastModifiedDate = new Date(lastModifiedTime);