【问题标题】:Databricks Spark conditional pull from Azure SQL来自 Azure SQL 的 Databricks Spark 条件拉取
【发布时间】:2021-01-29 04:05:20
【问题描述】:

我正在尝试使用 sql-spark-connecter 使用 Azure Databricks 从 Azure SQL 提取数据。我已在集群上安装了 Maven 库,并已在 Databricks 上成功运行此脚本以从示例数据库中提取:

server_name = "jdbc:sqlserver://(removed).database.windows.net"
database_name = (removed)
url = server_name + ";" + "databaseName=" + database_name + ";"
table_name = "dbo.Test"
username = (removed)
password = (removed)


jdbcDF = spark.read \
        .format("com.microsoft.sqlserver.jdbc.spark") \
        .option("url", url) \
        .option("dbtable", table_name) \
        .option("user", username) \
        .option("password", password) \
        .load()

display(jdbcDF)

但是,我想最终使用这个连接器从一个大表(5 mil+ 行)中拉取数据,并想在 .read 方法中添加一个过滤器,以减少我需要拉取的行数以节省处理功率和数据帧大小。理想情况下,我还想只提取特定的列,但优先级是行。

查看可用的Pyspark documentation,似乎没有通用的 .filter 属性,并且 sql spark 连接器文档也没有指定有助于过滤请求的可用 .option 键。我假设没有减少数据拉取的好方法,但如果有,请纠正我。

我可能会在查询后立即从数据框中删除不必要的列和行,以帮助降低成本和性能。如果有其他想法需要考虑,请告诉我!

【问题讨论】:

    标签: sql-server azure apache-spark pyspark azure-databricks


    【解决方案1】:

    传递将要执行的包含过滤器的查询。例如

    ...
    ...
    pushdown_query = "(select * from employees where emp_no < 10008) emp_alias"
    df = spark.read.jdbc(url=jdbcUrl, table=pushdown_query, 
    properties=connectionProperties)
    display(df)
    ...
    

    来自https://docs.databricks.com/data/data-sources/sql-databases.html 应该会有所帮助。

    【讨论】:

    • 谢谢,我会试一试。想使用新的连接器,但它仍在积极开发中
    • 老兄,它成功了!即使使用新的连接器。已使用:table_name = "(select top(5) * from dbo.Test) test" 很好。谢谢大佬!
    猜你喜欢
    • 2018-08-31
    • 2019-03-14
    • 2022-07-06
    • 1970-01-01
    • 2021-02-18
    • 2018-04-07
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    相关资源
    最近更新 更多