【问题标题】:What is the correct way to install the delta module in python?在 python 中安装 delta 模块的正确方法是什么?
【发布时间】:2020-04-09 21:51:09
【问题描述】:

在python中安装delta模块的正确方法是什么??

example 他们导入模块

from delta.tables import *

但我没有找到在我的虚拟环境中安装模块的正确方法

目前我正在使用这个 spark 参数 -

"spark.jars.packages": "io.delta:delta-core_2.11:0.5.0"

【问题讨论】:

    标签: pyspark databricks delta-lake


    【解决方案1】:

    由于正确答案隐藏在已接受解决方案的 cmets 中,我想我会在此处添加它。

    您需要使用一些额外的设置来创建您的 spark 上下文,然后您可以导入 delta:

    spark_session = SparkSession.builder \
        .master("local") \
        .config("spark.jars.packages", "io.delta:delta-core_2.12:0.8.0") \
        .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \
        .config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog") \
        .getOrCreate()
    
    from delta.tables import *
    

    令人讨厌的是,您的 IDE 当然会因为未安装软件包而对您大喊大叫,而且您还将在没有自动完成和输入提示的情况下进行操作。我确信有一个解决方法,如果我遇到它,我会更新。

    软件包本身在他们的 github here 上,自述文件建议您可以 pip install 但这不起作用。理论上你可以克隆它并手动安装。

    【讨论】:

    • 您找到自动完成的解决方法了吗?
    • 不,我只是在破解,不得不把它放下。从理论上讲,您可以从他们的 github(答案中的链接)中获取软件包,然后安装它,但没有 setup.py,所以这不是一项简单的任务。另一种(和hacky)解决方案可能是只提取表格代码(github.com/delta-io/delta/blob/master/python/delta/tables.py)并将其放入您的应用程序中。
    【解决方案2】:

    由于 Delta 的 Python 代码存储在 jar 中并由 Spark 加载,所以在创建 SparkSession/SparkContext 之前无法导入 delta 模块。

    【讨论】:

    • 我创建了一个 SparkSession,但仍然出现该错误。你有有效的代码吗?
    • 我不是 100% 确定,但我认为 from delta.tables import * 不会在 Databricks 运行时之外工作。但是,您可以使用增量表,但不能使用特定的增量表实用程序。
    • 你是如何开始 pyspark 的?如果你运行像pyspark --packages io.delta:delta-core_2.11:0.5.0 ... 这样的命令,它应该可以工作。
    • 启动 python 然后 SparkSession.builder.config("spark.jars.packages",'io.delta:delta-core_2.11:0.6.1').config("spark.delta.logStore.class","org.apache.spark.sql.delta.storage.S3SingleDriverLogStore").config("spark.sql.extensions","io.delta.sql.DeltaSparkSessionExtension").config("spark.sql.catalog.spark_catalog","org.apache.spark.sql.delta.catalog.DeltaCatalog").getOrCreate() 读写 Delta Tables 工作,from delta.tables import * 没有。但是,当我像您一样启动 pyspark REPL 时,它确实如此。 - 我得想办法。
    • spark.jars.packagesorg.apache.spark.deploy.SparkSubmitArguments/SparkSubmit 处理。所以它必须作为spark-submit 的参数传递。当SparkSession.builder.config 被调用时,SparkSubmit 已经完成了它的工作。所以spark.jars.packages 此刻是无操作的。
    【解决方案3】:

    要使用PySpark在本地运行Delta,需要关注官方documentation

    这对我有用,但仅在直接执行脚本 (python ) 时有效,而不是使用 pytestunittest

    要解决这个问题,需要添加这个环境变量:

    PYSPARK_SUBMIT_ARGS='--packages io.delta:delta-core_2.12:1.0.0 pyspark-shell'
    

    使用符合您情况的 Scala 和 Delta 版本。有了这个环境变量,我可以通过 cli 运行 pytest 或 unittest 没有任何问题

    from unittest import TestCase
    
    from delta import configure_spark_with_delta_pip
    from pyspark.sql import SparkSession
    
    
    class TestClass(TestCase):
        
        builder = SparkSession.builder.appName("MyApp") \
            .master("local[*]")
            .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \
            .config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog")
        
        spark = configure_spark_with_delta_pip(builder).getOrCreate()
    
        def test_create_delta_table(self):
                self.spark.sql("""CREATE IF NOT EXISTS TABLE <tableName> (
                                  <field1> <type1>)
                                  USING DELTA""")
    

    函数 configure_spark_with_delta_pip 在构建器对象中附加一个配置选项

    .config("io.delta:delta-core_<scala_version>:<delta_version>")
    

    【讨论】:

      【解决方案4】:

      就我而言,问题是我的集群在低于 6.1 的 Databricks Runtime 上运行

      https://docs.databricks.com/delta/delta-update.html

      Python API 在 Databricks Runtime 6.1 及更高版本中可用。

      将 Databricks Runtime 更改为 6.4 后问题消失了。

      为此:单击集群 -> 选择您正在使用的集群 -> 编辑 -> 选择 Databricks Runtime 6.1 及更高版本

      【讨论】:

      • 感谢您的回答,但我猜这个问题与没有 Databricks 的“纯”python 有关
      • @Andrej 不是,它有一个“databricks”标签
      • 我猜带有 databricks 的标签因错误而存在,应该被删除,delta Lake 是在 databricks 中配置的开箱即用 - docs.databricks.com/delta/intro-notebooks.html 当你需要使用“spark.jars.packages”时例如,您正在本地机器上设置 spark。
      猜你喜欢
      • 1970-01-01
      • 2019-10-17
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 2011-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多