Блоки данных читают дату последнего изменения BLOB-объекта Azure - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть хранилище BLOB-объектов Azure, подключенное к моим hdf-файлам Databricks.Есть ли способ получить дату последнего изменения большого двоичного объекта в блоках данных?

Вот как я читаю содержимое большого двоичного объекта:

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

1 Ответ

0 голосов
/ 13 декабря 2018

Как правило, есть два способа прочитать последние измененные данные BLOB-объекта Azure, как показано ниже.

  1. Непосредственное чтение с помощью API-интерфейса REST Azure Storage или пакета SDK Azure Storage для Java.После того, как я исследовал API REST хранилища BLOB-объектов Azure, существует два API REST Get Blob & Get Blob Properties, которые могут получить свойство Last-Modified из заголовка ответа.Таким образом, вы можете вызывать эти apis в Scala для анализа заголовка ответа api, чтобы получить его, или просто использовать Azure Storage SDK для Java в Scala, чтобы сделать то же самое.

Вот мой пример кода на Java для получения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 основан на Azure Storage SDK для Java 8.0.0, а не на новейшей версии 10.0, поэтому мой примерприведенный выше код отличается от официального руководства по хранилищу BLOB-объектов Azure для Java .

Если вы хотите получить свойство контейнера Last-Modified, вы можете использовать REST API [Get Container Properties][5] или код Java Date lastModifiedDate = container.getProperties().getLastModified();.

Использование Hadoop Azure Java API для протокола wasb://.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...