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

时间:2019-12-17 11:37:31

标签: pyspark databricks delta-lake

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

他们在example中导入模块

from delta.tables import *

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

当前我正在使用此Spark Param-

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

4 个答案:

答案 0 :(得分:4)

由于正确答案隐藏在已接受解决方案的评论中,我想我会在这里添加。

您需要使用一些额外设置创建 Spark 上下文,然后您可以导入增量:

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 但这不起作用。理论上你可以克隆它并手动安装。

答案 1 :(得分:1)

由于Delta的Python代码存储在jar中并由Spark加载,因此delta模块只有在创建SparkSession / SparkContext之后才能导入。

答案 2 :(得分:0)

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

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

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

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

为此,请执行以下操作:单击群集->选择要使用的群集->编辑->选择Databricks Runtime 6.1及更高版本

答案 3 :(得分:0)

要使用 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>")