小编Ale*_*Ott的帖子

如何在不手动配置的情况下使用databricks-cli

我想使用 databricks cli:

databricks clusters list
Run Code Online (Sandbox Code Playgroud)

但这需要一个手动步骤,需要与用户进行交互工作:

databricks configure --token
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以在无需手动干预的情况下使用 databricks cli,以便可以将其作为 ci/cd 管道的一部分运行?

bash azure databricks databricks-cli

9
推荐指数
3
解决办法
9068
查看次数

如何删除Delta表中的重复项?

有一个函数可以从 Delta 表中删除数据:

deltaTable = DeltaTable.forPath(spark, "/data/events/")
deltaTable.delete(col("date") < "2017-01-01")
Run Code Online (Sandbox Code Playgroud)

但有没有办法以某种方式删除重复项?就像 deltaTable.dropDuplicates()...

我不想将整个表作为数据帧读取,删除重复项,然后再次将其重写到存储中

duplicates apache-spark delta-lake

9
推荐指数
2
解决办法
2万
查看次数

增量表合并多列

我有一个表,其主键为多个列,因此我需要对多个列执行合并逻辑


DeltaTable.forPath(spark, "path")
  .as("data")
  .merge(
    finalDf1.as("updates"),
    "data.column1 = updates.column1 AND data.column2 = updates.column2 AND data.column3 = updates.column3 AND data.column4 = updates.column4 AND data.column5 = updates.column5")
  .whenMatched
  .updateAll()
  .whenNotMatched
  .insertAll()
  .execute()

Run Code Online (Sandbox Code Playgroud)

当我检查数据计数时,它没有按预期更新。

有人可以帮我解决这个问题吗?

databricks azure-databricks delta-lake

9
推荐指数
1
解决办法
9517
查看次数

为什么Spark中repartition比partitionBy更快?

我正在尝试将 Spark 用于一个非常简单的用例:给定大量文件(90k),其中包含数百万台设备的设备时间序列数据,将给定设备的所有时间序列读取分组到一组文件中(分割)。现在让\xe2\x80\x99s 假设我们的目标是 100 个分区,并且给定设备数据显示在同一个输出文件(只是同一个分区)中并不重要。

\n

考虑到这个问题,我们\xe2\x80\x99想出了两种方法来做到这一点 - repartitionthenwritewritewithpartitionBy应用于Writer. 其中任何一个的代码都非常简单:

\n

repartition(添加哈希列是为了确保与partitionBy下面的代码的比较是一对一的):

\n
\ndf = spark.read.format("xml") \\\n  .options(rowTag="DeviceData") \\\n  .load(file_path, schema=meter_data) \\\n  .withColumn("partition", hash(col("_DeviceName")).cast("Long") % num_partitions) \\\n  .repartition("partition") \\\n  .write.format("json") \\\n  .option("codec", "org.apache.hadoop.io.compress.GzipCodec") \\\n  .mode("overwrite") \\\n  .save(output_path)\n\n
Run Code Online (Sandbox Code Playgroud)\n

partitionBy:

\n
\ndf = spark.read.format("xml") \\\n  .options(rowTag="DeviceData") \\\n  .load(file_path, schema=meter_data) \\\n  .withColumn("partition", hash(col("_DeviceName")).cast("Long") % num_partitions) \\\n  .write.format("json") \\\n  .partitionBy(\xe2\x80\x9cpartition\xe2\x80\x9d) \\\n  .option("codec", "org.apache.hadoop.io.compress.GzipCodec") \\\n  .mode("overwrite") \\\n  .save(output_path)\n\n
Run Code Online (Sandbox Code Playgroud)\n

在我们的测试中, …

apache-spark apache-spark-sql pyspark apache-spark-xml

9
推荐指数
2
解决办法
7104
查看次数

Cassandra 如何查看活跃的用户连接

在 cassandra(我使用 DSE)中,

  1. 如何检查有多少用户连接到数据库?有什么方法可以检查节点吗?
  2. 是否存储了任何审核信息,这些信息会告诉我哪些所有用户以及所使用的 IP 地址和驱动程序等信息都已连接?
  3. 在 Opscenter 中,有一个称为“本机客户端”的指标,此信息存储在数据库中的何处以进行查询?这是否包括节点和备份等之间的内部通信?

cassandra

8
推荐指数
1
解决办法
6173
查看次数

Databricks CLI:SSLError,找不到本地颁发者证书

我已经安装并配置了 Databricks CLI,但是当我尝试使用它时,我收到一条错误,表明它找不到本地颁发者证书:

$ dbfs ls dbfs:/databricks/cluster_init/
Error: SSLError: HTTPSConnectionPool(host='dbc-12345678-1234.cloud.databricks.com', port=443): Max retries exceeded with url: /api/2.0/dbfs/list?path=dbfs%3A%2Fda
tabricks%2Fcluster_init%2F (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer
 certificate (_ssl.c:1123)')))
Run Code Online (Sandbox Code Playgroud)

上述错误是否表明我需要安装证书,或者以某种方式配置我的环境,以便它知道如何找到正确的证书?

我的环境是带有 WSL 的 Windows 10 (Ubuntu 20.04)(上面的命令来自 WSL/Ubuntu 命令行)。

Databricks CLI 已安装到 Anaconda 环境中,包括以下证书和 SSL 包:

$ conda list | grep cert
ca-certificates           2020.6.20            hecda079_0    conda-forge
certifi                   2020.6.20        py38h32f6830_0    conda-forge
$ conda list | grep ssl
openssl                   1.1.1g               h516909a_1    conda-forge
pyopenssl                 19.1.0                     py_1    conda-forge
Run Code Online (Sandbox Code Playgroud)

当我尝试使用 REST …

python ssl databricks databricks-cli

8
推荐指数
1
解决办法
1万
查看次数

如何使用 pyspark 更新结构体嵌套列中的值

我尝试做非常简单的事情 - 更新嵌套列的值;但是,我不知道如何

环境:

  1. 阿帕奇火花2.4.5
  2. 数据块 6.4
  3. Python 3.7
dataDF = [
  (('Jon','','Smith'),'1580-01-06','M',3000)
]


schema = StructType([
        StructField('name', StructType([
             StructField('firstname', StringType(), True),
             StructField('middlename', StringType(), True),
             StructField('lastname', StringType(), True)
             ])),
         StructField('dob', StringType(), True),
         StructField('gender', StringType(), True),
         StructField('gender', IntegerType(), True)
         ])


df = spark.createDataFrame(data = dataDF, schema = schema)
df = df.withColumn("name.firstname", lit('John'))
df.printSchema()
df.show()

#Results
#I get a new column instead of update

root
 |-- name: struct (nullable = true)
 |    |-- firstname: string (nullable = true)
 |    |-- middlename: string …
Run Code Online (Sandbox Code Playgroud)

python apache-spark apache-spark-sql pyspark

8
推荐指数
2
解决办法
8883
查看次数

在 Spark 作业中获取 Databricks 集群 ID(或获取集群链接)

我想要在正在运行的 Spark 作业中获取集群链接(或手动组成链接的集群 ID)。

这将用于打印警报消息中的链接,使工程师更容易访问日志。

是否可以在 Databricks 中运行的 Spark 作业中实现这一目标?

pyspark databricks databricks-workflows

8
推荐指数
1
解决办法
7608
查看次数

使用 AAD 令牌在 Databricks 中创建 Azure Key Vault 支持的秘密范围

我的最终目标是将 ADLS gen2 容器安装到我的 Databricks 工作区中,作为在 Azure 服务主体的支持下由 Terraform 管理的部署的一部分。这是一个单一部署,它创建所有 Azure 资源(网络、防火墙、存储帐户、Databricks 工作区等),然后使用 Databricks Terraform 提供程序配置 Databricks 工作区。

这个答案说我无法使用服务主体进行 AAD 直通安装,这意味着我必须使用 OAuth2 身份验证。为此,我需要 Databricks 中的 Azure Key Vault 支持的秘密范围。Terraform 文档说我只能通过基于用户的身份验证来做到这一点,而不能通过我的服务主体来做到这一点。

所以我想也许我可以实现一个 hack:在 Terraform 中创建一个 Databricks PAT(同样,始终作为服务主体),然后使用 Terraform 资源external“外壳”到 Databricks CLI,使用此 PAT 进行身份验证。我手动尝试了此操作并收到此错误:

{
  "error_code": "INVALID_PARAMETER_VALUE",
  "message": "Scope with Azure KeyVault must have userAADToken defined!"
}
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为 PAT 是为服务主体创建的。但是,作为替代方案,此答案建议使用 Azure AD 令牌身份验证,而不是 PAT。所以,我就从那个兔子洞里走下去!

我可以按照Microsoft 的文档获取 Azure AD 令牌,然后使用它对 Databricks CLI 进行身份验证:

export ARM_TENANT_ID="..." …
Run Code Online (Sandbox Code Playgroud)

azure azure-active-directory azure-keyvault azure-databricks databricks-cli

8
推荐指数
1
解决办法
4698
查看次数

Databricks CLI 配置错误“请使用 dbfs 配置重新配置”

我已经安装并配置了 Databricks CLI,但在运行时出现以下错误

databricks workspace ls
Run Code Online (Sandbox Code Playgroud)

返回错误:

错误:您的身份验证信息可能不正确。请使用 dbfs configure 重新配置

安装 CLI 的步骤

1) 使用安装pip install databricks-cli
2) 使用 CLI 配置databricks configure --token。我的~/.databrickscfg文件如下所示:

[DEFAULT]
host = https://<account>.cloud.databricks.com
token = <password_generated_from_access_token
Run Code Online (Sandbox Code Playgroud)

有没有人遇到过这个错误并有解决方案?

python databricks databricks-cli

7
推荐指数
1
解决办法
9812
查看次数