我已经为Azure Data Lake Store上的所有目录部署了一个具有rwx权限的Azure HDInsight群集,该目录也可用作其存储帐户。在头节点上,我可以加载例如使用以下命令从ADLS获取图像数据:
my_rdd = sc.binaryFiles('adl://{}.azuredatalakestore.net/my_file.png')
工作人员无权访问SparkContext的binaryFiles()
功能。我可以使用azure-datalake-store
Python SDK加载文件,但这似乎要慢得多。我假设是因为它没有实现集群和ADLS之间关联的好处。
是否有更快的方法从工作人员的关联ADLS加载文件?
如果需要,还有其他背景信息:
我正在使用PySpark将训练有素的深度学习模型应用于大量图像。由于模型需要很长时间才能加载,我的理想是:
mapPartition()
应用于包含完整列表的RDD)由于我不知道如何有效地将图像加载到工人身上,我现在最好的选择是对包含图像字节数据的RDD进行分区,这(我假设)是内存效率低下并造成瓶颈通过让头节点完成所有数据加载。
答案 0 :(得分:1)
HDInsight群集的主存储仅作为HDFS根目录提供。
mAdapter = new FirebasePostQueryAdapter(postPaths,
new FirebasePostQueryAdapter.OnSetupViewListener() {
@Override
public void onSetupView(PostViewHolder holder, Post post, int position, String postKey) {
setupPost(holder, post, position, postKey);
}
});
mRecyclerView.setAdapter(mAdapter);
在pyspark:
hdfs dfs -ls /user/digdug/images/
Found 3 items
-rw-r--r-- 1 digdug supergroup 4957 2017-01-24 07:59 /user/digdug/images/a.png
-rw-r--r-- 1 digdug supergroup 4957 2017-01-24 07:59 /user/digdug/images/b.png
-rw-r--r-- 1 digdug supergroup 1945 2017-01-24 08:01 /user/digdug/images/c.png
输出:
rdd = sc.binaryFiles("/user/digdug/images")
def f(iterator):
sizes = []
for i in iterator:
sizes.append(len(i[1]))
return sizes
rdd.mapPartitions(f).collect()