我已经powerBI
使用来自 的数据源构建了一个仪表板Datalake Gen2
。我正在尝试将新列添加到我的原始数据源中。如何从 PowerBI 端刷新而不出现太多问题,或者最好的方法是什么?
我正在尝试从 Azure Databricks 准备 Excel 文件 ( .xlsx
),文件位于 ADLS Gen 2 中。
例子:
srcPathforParquet = "wasbs://hyxxxx@xxxxdatalakedev.blob.core.windows.net//1_Raw//abc.parquet"
srcPathforExcel = "wasbs://hyxxxx@xxxxdatalakedev.blob.core.windows.net//1_Raw//src.xlsx"
Run Code Online (Sandbox Code Playgroud)
从路径读取镶木地板文件效果很好。
srcparquetDF = spark.read.parquet(srcPathforParquet )
Run Code Online (Sandbox Code Playgroud)
从路径读取excel文件抛出错误:没有这样的文件或目录
srcexcelDF = pd.read_excel(srcPathforExcel , keep_default_na=False, na_values=[''])
Run Code Online (Sandbox Code Playgroud) 我正在将事实表和维度表从 SQL Server 导入到 Azure Data Lake Gen 2。
如果我要整理表格以创建对在 Azure Databricks 上运行 ML 模型有用的数据集,我应该将数据保存为“Parquet”还是“Delta”?
存储为 parquet 和 delta 有什么区别?
apache-spark apache-spark-sql azure-data-lake azure-databricks azure-data-lake-gen2
问题
我们在 ADLS Gen2 之上有一个 Delta Lake 设置,其中包含下表:
bronze.DeviceData
: 按到达日期划分 ( Partition_Date
)silver.DeviceData
:按事件日期和时间(Partition_Date
和Partition_Hour
)分区我们从事件中心摄取大量数据(每天超过 6 亿条记录)到bronze.DeviceData
(仅追加)。然后我们以流方式处理新文件,并silver.DeviceData
使用 delta MERGE 命令将它们更新插入(见下文)。
到达铜牌表的数据可以包含来自任何银牌分区的数据(例如,设备可以发送它在本地缓存的历史数据)。但是,任何一天到达的>90% 的数据都来自分区Partition_Date IN (CURRENT_DATE(), CURRENT_DATE() - INTERVAL 1 DAYS, CURRENT_DATE() + INTERVAL 1 DAYS)
。因此,为了更新数据,我们有以下两个 spark 作业:
现在我们来解决这个问题:虽然在“慢”工作中数据量少了很多,但它运行数天只是为了处理一天的慢青铜数据,有一个大集群。原因很简单:它必须读取和更新许多银分区(有时> 1000 个日期分区),并且由于更新很小但日期分区可能是千兆字节,因此这些合并命令效率低下。
而且,随着时间的推移,这个缓慢的工作会变得越来越慢,因为它接触到的银色分区会增长。
问题
附加信息
CREATE TABLE silver.DeviceData (
DeviceID LONG NOT NULL, -- the …
Run Code Online (Sandbox Code Playgroud) scala apache-spark databricks delta-lake azure-data-lake-gen2
我正在努力创建带有公司徽标的 databricks 笔记本模板。使用下面的代码显示图像会引发错误。
代码:
%md
<img src ='/test/image/MyImage.jpg'>
Run Code Online (Sandbox Code Playgroud)
错误:
HTTP ERROR 403: Invalid or missing CSRF token
Run Code Online (Sandbox Code Playgroud)
请指导我。
在计算目标上执行训练脚本期间,我们尝试从 ADLS2 数据存储区下载已注册的数据集。问题是使用以下方法将 ~1.5Gb(分成 ~8500 个文件)下载到计算目标需要几个小时:
from azureml.core import Datastore, Dataset, Run, Workspace
# Retrieve the run context to get Workspace
RUN = Run.get_context(allow_offline=True)
# Retrieve the workspace
ws = RUN.experiment.workspace
# Creating the Dataset object based on a registered Dataset
dataset = Dataset.get_by_name(ws, name='my_dataset_registered')
# Download the Dataset locally
dataset.download(target_path='/tmp/data', overwrite=False)
Run Code Online (Sandbox Code Playgroud)
重要提示:数据集注册到 Datalake 中的一个路径,该路径包含许多子文件夹(以及子子文件夹,..),其中包含大约 170Kb 的小文件。
注意:az copy
我可以使用存储资源管理器在几分钟内将完整的数据集下载到本地计算机。此外,数据集是在文件夹阶段定义的,并使用 ** 通配符扫描子文件夹:datalake/relative/path/to/folder/**
这是一个已知问题吗?如何提高传输速度?
谢谢 !
python azure azure-data-lake azure-machine-learning-service azure-data-lake-gen2
我想在我的 Azure 机器学习工作区 ( azureml-core==1.12.0
) 中注册来自 ADLS Gen2 的数据集。由于服务主体的信息不Python的SDK中所需的文件的.register_azure_data_lake_gen2()
,我成功地使用下面的代码来注册ADLS第二代的数据存储:
from azureml.core import Datastore
adlsgen2_datastore_name = os.environ['adlsgen2_datastore_name']
account_name=os.environ['account_name'] # ADLS Gen2 account name
file_system=os.environ['filesystem']
adlsgen2_datastore = Datastore.register_azure_data_lake_gen2(
workspace=ws,
datastore_name=adlsgen2_datastore_name,
account_name=account_name,
filesystem=file_system
)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试注册数据集时,使用
from azureml.core import Dataset
adls_ds = Datastore.get(ws, datastore_name=adlsgen2_datastore_name)
data = Dataset.Tabular.from_delimited_files((adls_ds, 'folder/data.csv'))
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
无法从指定路径加载任何数据。确保路径可访问并包含数据。
ScriptExecutionException
是由StreamAccessException
. StreamAccessException 是由 AuthenticationException 引起的。'AdlsGen2-ReadHeaders'
对于存储上的“[REDACTED]”失败,状态代码为“禁止”(此请求无权使用此权限执行此操作。),客户端请求 ID <CLIENT_REQUEST_ID>,请求 ID <REQUEST_ID>。错误信息:[已编辑] | session_id=<SESSION_ID>
我是否需要启用服务主体才能使其正常工作?使用 ML Studio UI,似乎甚至需要服务主体来注册数据存储。
我注意到的另一个问题是 AMLS 试图访问这里的数据集:
https://adls_gen2_account_name.**dfs**.core.windows.net/container/folder/data.csv
而 ADLS Gen2 中的实际 URI …
我是 Spark 和 Kubernetes 世界的新手。我使用 docker-image-tool.sh 实用程序使用与 Hadoop 3.2 捆绑在一起的官方 Spark 3.0.1 构建了 Spark docker 映像。
我还为 Jupyter Notebook 创建了另一个 docker 映像,并尝试在客户端模式下在 Kubernetes 上运行 Spark。我首先将 Jupyter 笔记本作为 pod 运行,使用 kubectl 进行端口转发,并从我的系统 localhost:8888 访问笔记本 UI。一切似乎都运转良好。我能够从笔记本成功运行命令。
现在,我尝试使用Hadoop ABFS 连接器从我的笔记本访问 Azure Data Lake Gen2 。我将 Spark 上下文设置如下。
from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession
# Create Spark config for our Kubernetes based cluster manager
sparkConf = SparkConf()
sparkConf.setMaster("k8s://https://kubernetes.default.svc.cluster.local:443")
sparkConf.setAppName("spark")
sparkConf.set("spark.kubernetes.container.image", "<<my_repo>>/spark-py:latest")
sparkConf.set("spark.kubernetes.namespace", "spark")
sparkConf.set("spark.executor.instances", "3")
sparkConf.set("spark.executor.cores", "2")
sparkConf.set("spark.driver.memory", "512m") …
Run Code Online (Sandbox Code Playgroud) 我已在 Azure Synapse 中设置了一个无服务器 SQL 池,该池正在查询我为链接的 Azure Data Lake 设置的视图。
CREATE VIEW DeviceTelemetryView
AS SELECT corporationid, deviceid, version, Convert(datetime, dateTimestamp, 126) AS dateTimeStamp, deviceData FROM
OPENROWSET(
BULK 'https://test123.dfs.core.windows.net/devicetelemetry/*/*/*/*/*/',
FORMAT = 'PARQUET'
) AS [result]
GO
Run Code Online (Sandbox Code Playgroud)
使用 synapse studio 或 SSMS 中的 Azure AD 凭据查询此视图没有任何问题。当我尝试使用 SQL 管理员帐户进行查询时,出现以下错误:
找不到凭据“https://test123.dfs.core.windows.net/devicetelemetry/////*/ ” ,因为它不存在或您没有权限。
重要的是,我能够使用 SQL 管理凭据进行查询,因为我们希望通过应用程序查询此视图以获取各种报告,因此不想使用 AAD 凭据。
我已经尝试过这里提供的SO解决方案:GRANT Database Scoped Credential语法给出不匹配的输入错误
GRANT REFERENCES ON DATABASE SCOPED CREDENTIAL::[WorkspaceSystemIdentity] TO [sqlAdmin];
Run Code Online (Sandbox Code Playgroud)
由于这似乎是在将我的 DataLake 链接到 Synapse 时创建的默认凭据,但是在针对我的视图所在的数据库运行时,这会给我带来以下错误:
找不到数据库范围的凭据“WorkspaceSystemIdentity”,因为它不存在或您没有权限。
azure-sql-server azure-managed-identity azure-data-lake-gen2 azure-synapse
我正在使用 Azure SDK (Java) 在 ADLSGEN2 中创建目录、上传文件、移动文件。
我的输入非常简单,如下所示:
path : /path/to/fileOrFolder
但我收到以下错误:
com.azure.storage.file.datalake.models.DatalakeStorageException: Status Error code 400: The request URI is invalid ...
Run Code Online (Sandbox Code Playgroud) 我正在尝试在连接到 Azure Data Lake Gen2 帐户的 Azure Databricks 工作区中简化开发人员/数据科学家的笔记本创建过程。现在,每个笔记本的顶部都有这个:
%scala
spark.sparkContext.hadoopConfiguration.set("fs.azure.account.auth.type.<datalake.dfs.core.windows.net", "OAuth")
spark.sparkContext.hadoopConfiguration.set("fs.azure.account.oauth.provider.type.<datalake>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.sparkContext.hadoopConfiguration.set("fs.azure.account.oauth2.client.id.<datalake>.dfs.core.windows.net", <SP client id>)
spark.sparkContext.hadoopConfiguration.set("fs.azure.account.oauth2.client.secret.<datalake>.dfs.core.windows.net", dbutils.secrets.get(<SP client secret>))
spark.sparkContext.hadoopConfiguration.set("fs.azure.account.oauth2.client.endpoint.<datalake>.dfs.core.windows.net", "https://login.microsoftonline.com/<tenant>/oauth2/token")
Run Code Online (Sandbox Code Playgroud)
我们的实现试图避免安装在 DBFSS 中,因此我一直在尝试查看是否可以使用集群上的 Spark 配置来定义这些值(每个集群可以访问不同的数据湖)。
但是,我还无法让它发挥作用。当我尝试各种口味时:
org.apache.hadoop.fs.azure.account.oauth2.client.id.<datalake>.dfs.core.windows.net <sp client id>
org.apache.hadoop.fs.azure.account.auth.type.<datalake>.dfs.core.windows.net OAuth
org.apache.hadoop.fs.azure.account.oauth.provider.type.<datalake>.dfs.core.windows.net "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider"
org.apache.hadoop.fs.azure.account.oauth2.client.secret.<datalake>.dfs.core.windows.net {{secrets/secret/secret}}
org.apache.hadoop.fs.azure.account.oauth2.client.endpoint.<datalake>.dfs.core.windows.net "https://login.microsoftonline.com/<tenant>"
Run Code Online (Sandbox Code Playgroud)
我收到“初始化配置失败” 上面的版本看起来默认尝试使用存储帐户访问密钥而不是 SP 凭据(这只是使用一个简单的ls
命令进行测试以确保其有效)。
ExecutionError: An error occurred while calling z:com.databricks.backend.daemon.dbutils.FSUtils.ls.
: Failure to initialize configuration
at shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.services.SimpleKeyProvider.getStorageAccountKey(SimpleKeyProvider.java:51)
at shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.AbfsConfiguration.getStorageAccountKey(AbfsConfiguration.java:412)
at shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.AzureBlobFileSystemStore.initializeClient(AzureBlobFileSystemStore.java:1016)
Run Code Online (Sandbox Code Playgroud)
我希望有办法解决这个问题,尽管如果唯一的答案是“你不能这样做”,这当然是一个可以接受的答案。
我有一个 ADF,它具有能够访问 ADLS 的托管身份。现在我需要这个 ADF 来调用 Databricks 笔记本,并且该笔记本也应该访问 ADLS。我可以使用 ADF 的托管身份来完成此操作吗?我怎样才能做到这一点?
azure azure-data-factory azure-databricks azure-data-lake-gen2
apache-spark ×4
azure ×4
azure-machine-learning-service ×2
databricks ×2
python ×2
delta-lake ×1
excel ×1
hadoop ×1
java ×1
kubernetes ×1
powerbi ×1
python-3.x ×1
scala ×1
sdk ×1