标签: databricks-connect

在 Databricks Connect 和本地 Spark 环境之间切换

我希望使用 Databricks Connect 来开发 pyspark 管道。DBConnect 真的很棒,因为我能够在实际数据所在的集群上运行我的代码,因此它非常适合集成测试,但我也希望能够在开发和单元测试(pytest使用pytest-spark)期间,简单地使用本地火花环境。

有没有办法配置 DBConnect,以便对于一个用例我只需使用本地 Spark 环境,但对于另一个用例则使用 DBConnect?

apache-spark pyspark databricks databricks-connect

14
推荐指数
1
解决办法
1784
查看次数

无法使私有 java.nio.DirectByteBuffer(long,int) 可访问

我正在使用 Python 通过databricks-connect. 在墙后面,这使用了 Spark,它确实是基于 java 的,所以为了使用它,我需要 java。JDK已下载(版本14),设置为JAVA_HOME env,但是当我运行代码时,出现以下错误:

引起原因:java.lang.reflect.InaccessibleObjectException:无法使私有java.nio.DirectByteBuffer(long,int)可访问:模块java.base不会“打开java.nio”到未命名模块@bccb269

这是崩溃的代码

from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索但找不到这个错误,我认为这不是我第一次遇到。任何想法这个错误意味着什么以及如何修复它?

java databricks databricks-connect

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

使用Databricks Connect时如何在Scala中正确访问dbutils

我正在使用Databricks Connect从IntelliJ IDEA(Scala)在本地Azure Databricks群集中运行代码。

一切正常。我可以在IDE中本地连接,调试和检查。

我创建了一个Databricks作业来运行我的自定义应用程序JAR,但由于以下异常而失败:

19/08/17 19:20:26 ERROR Uncaught throwable from user code: java.lang.NoClassDefFoundError: com/databricks/service/DBUtils$
at Main$.<init>(Main.scala:30)
at Main$.<clinit>(Main.scala)
Run Code Online (Sandbox Code Playgroud)

我的Main.scala类的第30行是

val dbutils: DBUtils.type = com.databricks.service.DBUtils
Run Code Online (Sandbox Code Playgroud)

就像本文档页面上的描述一样

该页面显示了一种访问在本地和群集中均可使用的DBUtil的方法。但是该示例仅显示了Python,而我正在使用Scala。

以既可以使用databricks-connect在本地工作又可以在运行JAR的Databricks作业中工作的方式访问它的正确方法是什么?

更新

似乎有两种使用DBUtils的方法。

1)这里描述的DbUtils类。引用文档,此库允许您构建和编译项目,但不能运行它。这不允许您在集群上运行本地代码。

2)此处描述 Databricks Connect 。这使您可以在Databricks集群中运行本地Spark代码。

问题在于这两种方法具有不同的设置和程序包名称。似乎没有一种在本地使用Databricks Connect的方法(在群集中不可用),但是随后通过sbt / maven添加了使用DbUtils类的jar应用程序,以便群集可以访问它。

scala databricks azure-databricks databricks-connect dbutils

6
推荐指数
2
解决办法
125
查看次数

使用 toPandas() 和 databricks 连接时遇到“java.lang.OutOfMemoryError: Java heap space”

我正在尝试将大小为 [2734984 行 x 11 列] 的 pyspark 数据帧转换为调用toPandas(). 虽然使用 Azure Databricks Notebook 时它完全正常工作(11 秒),java.lang.OutOfMemoryError: Java heap space但当我使用 databricks-connect(db-connect 版本和 Databricks 运行时版本匹配并且都是 7.1)运行完全相同的代码时,我遇到了异常。

我已经增加了 spark 驱动程序内存 (100g) 和 maxResultSize (15g)。我想错误出在 databricks-connect 的某个地方,因为我无法使用 Notebooks 复制它。

任何提示这里发生了什么?

错误如下:

Exception in thread "serve-Arrow" java.lang.OutOfMemoryError: Java heap space
    at com.ning.compress.lzf.ChunkDecoder.decode(ChunkDecoder.java:51)
    at com.ning.compress.lzf.LZFDecoder.decode(LZFDecoder.java:102)
    at com.databricks.service.SparkServiceRPCClient.executeRPC0(SparkServiceRPCClient.scala:84)
    at com.databricks.service.SparkServiceRemoteFuncRunner.withRpcRetries(SparkServiceRemoteFuncRunner.scala:234)
    at com.databricks.service.SparkServiceRemoteFuncRunner.executeRPC(SparkServiceRemoteFuncRunner.scala:156)
    at com.databricks.service.SparkServiceRemoteFuncRunner.executeRPCHandleCancels(SparkServiceRemoteFuncRunner.scala:287)
    at com.databricks.service.SparkServiceRemoteFuncRunner.$anonfun$execute0$1(SparkServiceRemoteFuncRunner.scala:118)
    at com.databricks.service.SparkServiceRemoteFuncRunner$$Lambda$934/2145652039.apply(Unknown Source)
    at scala.util.DynamicVariable.withValue(DynamicVariable.scala:62)
    at com.databricks.service.SparkServiceRemoteFuncRunner.withRetry(SparkServiceRemoteFuncRunner.scala:135)
    at com.databricks.service.SparkServiceRemoteFuncRunner.execute0(SparkServiceRemoteFuncRunner.scala:113)
    at com.databricks.service.SparkServiceRemoteFuncRunner.$anonfun$execute$1(SparkServiceRemoteFuncRunner.scala:86)
    at com.databricks.service.SparkServiceRemoteFuncRunner$$Lambda$1031/465320026.apply(Unknown Source)
    at com.databricks.spark.util.Log4jUsageLogger.recordOperation(UsageLogger.scala:210)
    at com.databricks.spark.util.UsageLogging.recordOperation(UsageLogger.scala:346) …
Run Code Online (Sandbox Code Playgroud)

python pandas pyspark databricks databricks-connect

5
推荐指数
1
解决办法
828
查看次数

如何从 PyCharm 连接 Databricks Community Edition 集群

我想做一些小型练习项目,我希望使用 databricks 集群。这能做到吗。我希望有某种方法可以通过 databricks-connect 实用程序连接 databricks 集群。只需要一些步骤。提前致谢。

apache-spark pyspark databricks databricks-connect databricks-community-edition

5
推荐指数
1
解决办法
3692
查看次数

从 PyCharm IDE 执行 databricks magic 命令

借助 databricks-connect,我们可以从许多 IDE 成功运行在 Databricks 或 Databricks 笔记本中编写的代码。Databricks 还创建了许多神奇命令来支持其功能,即通过添加%sql或 等命令在每个单元中运行多语言支持%md。我当前面临的一个问题是当我尝试在 Pycharm 中执行 Databricks 笔记本时,如下所示:

  • 如何从 PyCharm 执行 Databricks 特定的魔法命令。例如,使用此命令在 Databricks 中的“完成”中导入脚本或笔记本 -

    %run
    './FILE_TO_IMPORT'
    
    Run Code Online (Sandbox Code Playgroud)

在 IDE 中工作的地方from FILE_TO_IMPORT import XYZ

每次我下载 Databricks 笔记本时,它都会注释掉魔法命令,这使得它无法在 Databricks 环境之外的任何地方使用。

每次我想做任何开发时都转换所有的databricks magic 命令,效率真的很低。

我可以设置任何配置来自动检测 Databricks 特定的魔法命令吗?

对此的任何解决方案都会有所帮助。提前致谢!!!

pycharm python-3.x databricks databricks-connect

5
推荐指数
1
解决办法
1125
查看次数

Databricks 连接 java.lang.ClassNotFoundException

我将我们的 databricks 集群更新到 Azure Databricks 上的 DBR 9.1 LTS,但是当我尝试使用 Databricks-connect 在 VS Code 中运行我经常使用的包时,会出现错误,而之前的集群则不会。之前的集群在 DBR 8.3 上运行。我也更新了该软件包以与新的 DBR 集群兼容。maven 坐标为
com.azure.cosmos.spark:azure-cosmos-spark_3-1_2-12:4.3.0。当我直接在 Databricks 笔记本中运行以下脚本时,它可以工作,但是当我使用 Databricks-connect 运行它时,出现以下错误。

# com.azure.cosmos.spark:azure-cosmos-spark_3-1_2-12:4.3.0
from pyspark.sql.types import StringType, StructField, StructType
from pyspark.sql import SparkSession
from pyspark.sql import functions as F
from pyspark.dbutils import DBUtils

spark = SparkSession.builder.appName("local").getOrCreate()
dbutils = DBUtils(spark)

cosmosEndpoint = ######################
cosmosMasterKey = ######################
cosmosDatabaseName = ######################
cosmosContainerName = "test"

cfg = {
    "spark.cosmos.accountEndpoint": cosmosEndpoint,
    "spark.cosmos.accountKey": cosmosMasterKey,
    "spark.cosmos.database": cosmosDatabaseName,
    "spark.cosmos.container": cosmosContainerName,
}
# Configure …
Run Code Online (Sandbox Code Playgroud)

python pyspark databricks azure-databricks databricks-connect

5
推荐指数
1
解决办法
2717
查看次数

databricks-connect 无法加载 udf 中的模块

我正在尝试加载PyNaCl到在 Windows 上运行的 pyspark UDF。

from nacl import bindings as c

def verify_signature(msg, keys):
    c.crypto_sign_ed25519ph_update(...)
    ...

verify_signature_udf = udf(lambda x: verify_signature(x, public_keys), BooleanType())

data_signed = data.withColumn(
    "is_signature_valid", verify_signature_udf("state_values")
)
Run Code Online (Sandbox Code Playgroud)

PyNaCl已在本地安装(使用databricks-connect),但据我了解,它没有安装在执行器上。因此我得到这个:

File "/databricks/spark/python/pyspark/cloudpickle/cloudpickle.py", line 679, in subimport
    __import__(name)
ModuleNotFoundError: No module named 'nacl'
Run Code Online (Sandbox Code Playgroud)

正如Python 打包中所述,我尝试像这样加载它:

File "/databricks/spark/python/pyspark/cloudpickle/cloudpickle.py", line 679, in subimport
    __import__(name)
ModuleNotFoundError: No module named 'nacl'
Run Code Online (Sandbox Code Playgroud)

没有变化,同样的消息。如果我只是从 tar.gz 中提取 nacl 包并将其存储为 zip 文件并按如下方式加载:

import os
os.environ['PYSPARK_PYTHON'] = "./environment/bin/python"
spark = SparkSession.builder.config(
    "spark.archives",
    "pyspark_venv.tar.gz#environment").getOrCreate()
Run Code Online (Sandbox Code Playgroud)

它已加载,但我现在收到此错误: …

python pyspark databricks pynacl databricks-connect

5
推荐指数
0
解决办法
315
查看次数

Databricks 连接到 IntelliJ + python 线程“main”中出现错误异常 java.lang.NoSuchMethodError:

我尝试将我的 databricks 与我的 IDE 连接

我的机器上没有下载 Spark ad/或 scala,但我下载了 pyspark (pip install pyspark)。我构建了必要的环境变量并创建了一个文件夹 Hadoop,在其中放置了一个文件夹 bin,在其中放置了一个 winutils.exe 文件。

这是一个循序渐进的过程,缓慢而稳定地解决了我的所有错误,除了最后一个:

import logging
from pyspark.sql import SparkSession
from pyspark import SparkConf

if __name__ == "__main__":
    spark = SparkSession.builder.getOrCreate()
    spark.sparkContext.setLogLevel("OFF")
Run Code Online (Sandbox Code Playgroud)

给予

1/03/30 15:14:33 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Exception in thread "main" …
Run Code Online (Sandbox Code Playgroud)

python databricks databricks-connect

4
推荐指数
1
解决办法
1260
查看次数

无法使用 databricks-connect“V2”V.13.2 访问 databricks 集群

当尝试使用 databricks-connect 13.2.0 执行本地 Spark 代码时,它不起作用。

我有以下问题:

错误:

  • 详情="INVALID_STATE: cluster xxxxx is not Shared or Single User Cluster. (requestId=05bc3105-4828-46d4-a381-7580f3b55416)"
  • 调试错误字符串="UNKNOWN:Error received from peer {grpc_message:"INVALID_STATE: cluster 0711-122239-bb999j6u is not Shared or Single User Cluster. (requestId=05bc3105-4828-46d4-a381-7580f3b55416)", grpc_status:9, created_time:"2023-07-11T15:26:08.9729+02:00"}"

该集群是共享的,我尝试了几种集群配置,但它不起作用!集群运行时版本为13.2。

另外,我使用:

  • Python 3.10
  • openjdk版本“1.8.0_292”
  • Azure 数据块

有人对新的 databricks connect 遇到过类似的问题吗?

感谢帮助!

我尝试了以下代码:

from databricks.connect import DatabricksSession
from pyspark.sql.types import *

from delta.tables import DeltaTable
from datetime import date


if __name__ == "__main__":
    spark = DatabricksSession.builder.getOrCreate()

    # Create a Spark DataFrame consisting …
Run Code Online (Sandbox Code Playgroud)

python azure databricks azure-databricks databricks-connect

4
推荐指数
1
解决办法
2023
查看次数

IllegalArgumentException:此服务需要项目 ID,但无法从构建器或环境中确定

我正在尝试将 BigQuery 数据集连接到 Databrick 并使用 Pyspark 运行脚本。

我做过的程序:

  • 我将 BigQuery Json API 修补到 dbfs 中的 databrick 以进行连接访问。

  • 然后我在集群库中添加了spark-bigquery-latest.jar并运行了我的脚本。

当我运行这个脚本时,我没有遇到任何错误。

from pyspark.sql import SparkSession
spark = (
    SparkSession.builder
    .appName('bq')
    .master('local[4]')
    .config('parentProject', 'google-project-ID')
    .config('spark.jars', 'dbfs:/FileStore/jars/jarlocation.jar') \
    .getOrCreate()
)
df = spark.read.format("bigquery").option("credentialsFile", "/dbfs/FileStore/tables/bigqueryapi.json") \
  .option("parentProject", "google-project-ID") \
  .option("project", "Dataset-Name") \
  .option("table","dataset.schema.tablename") \
  .load()
df.show()
Run Code Online (Sandbox Code Playgroud)

但是我没有尝试调用该模式中的单个表,而是尝试使用如下查询来调用其下的所有表:

from pyspark.sql import SparkSession
from google.cloud import bigquery
spark = (
    SparkSession.builder
    .appName('bq')
    .master('local[4]')
    .config('parentProject', 'google-project-ID')
    .config('spark.jars', 'dbfs:/FileStore/jars/jarlocation.jar') \
    .getOrCreate()
)
client = bigquery.Client()
table_list = 'dataset.schema'
tables …
Run Code Online (Sandbox Code Playgroud)

google-bigquery apache-spark pyspark databricks databricks-connect

3
推荐指数
1
解决办法
4223
查看次数

升级集群的 Databricks 运行时后调试 PySpark 时出错

我已将 Azure Databricks 群集从运行时 5.5LTS 更新到 7.3LTS。现在我在 VSCode 中调试时遇到错误。我已经更新了我的 Anaconda 连接,如下所示:

> conda create --name dbconnect python=3.7
> conda activate dbconnect
> pip uninstall pyspark
> pip install -U databricks-connect==7.3.*
> databricks-connect configure
> databricks-connect test
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,但现在我正在尝试调试以下内容

from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()
setting = spark.conf.get("spark.master")

if "local" in setting:
    from pyspark.dbutils import DBUtils
    dbutils = DBUtils(spark.sparkContext)
Run Code Online (Sandbox Code Playgroud)

在 上dbutils = DBUtils(spark.sparkContext),它抛出异常

发生异常:AttributeError“SparkContext”对象没有属性“conf”

我尝试过创建conf

from pyspark.dbutils import DBUtils
import pyspark
conf = pyspark.SparkConf()
pyspark.SparkContext.getOrCreate(conf=conf)
dbutils = DBUtils(spark.sparkContext) …
Run Code Online (Sandbox Code Playgroud)

python pyspark azure-databricks databricks-connect

0
推荐指数
1
解决办法
313
查看次数