Databricks 读取 Azure blob 上次修改日期
Databricks read Azure blob last modified date
我有一个 Azure blob 存储安装到我的 Databricks hdfs。
有没有办法获取数据块中 blob 的最后修改日期?
这就是我读取 blob 内容的方式:
val df = spark.read
.option("header", "false")
.option("inferSchema", "false")
.option("delimiter", ",")
.csv("/mnt/test/*")
一般来说,有两种方法可以读取 Azure Blob 最后修改的数据,如下所示。
- 通过 Azure Storage REST API 或 Azure Storage SDK for Java 直接读取。
在我研究了 Azure Blob Storage REST APIs 之后,有两个 REST APIs
Get Blob
& Get Blob Properties
可以从响应 [=51= 中获取 Last-Modified
属性 ].因此,您可以在 Scala 中调用这些 api 来解析 api 响应 header 以获取它,或者只需在 Scala 中使用 Azure Storage SDK for Java 来执行相同的操作。
这是我在 Java 中获取 Last-Modified
属性 blob 的示例代码。
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 is based on Azure Storage SDK for Java 8.0.0
, not a newest version 10.0
, so my sample code above is different from the offical tutorial of Azure Blob Storage for Java。
如果想获取容器的Last-Modified
属性,可以使用RESTAPI[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);
我有一个 Azure blob 存储安装到我的 Databricks hdfs。 有没有办法获取数据块中 blob 的最后修改日期?
这就是我读取 blob 内容的方式:
val df = spark.read
.option("header", "false")
.option("inferSchema", "false")
.option("delimiter", ",")
.csv("/mnt/test/*")
一般来说,有两种方法可以读取 Azure Blob 最后修改的数据,如下所示。
- 通过 Azure Storage REST API 或 Azure Storage SDK for Java 直接读取。
在我研究了 Azure Blob Storage REST APIs 之后,有两个 REST APIs
Get Blob
&Get Blob Properties
可以从响应 [=51= 中获取Last-Modified
属性 ].因此,您可以在 Scala 中调用这些 api 来解析 api 响应 header 以获取它,或者只需在 Scala 中使用 Azure Storage SDK for Java 来执行相同的操作。
这是我在 Java 中获取 Last-Modified
属性 blob 的示例代码。
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 is based on Azure Storage SDK for Java 8.0.0
, not a newest version 10.0
, so my sample code above is different from the offical tutorial of Azure Blob Storage for Java。
如果想获取容器的Last-Modified
属性,可以使用RESTAPI[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);