【问题标题】:Databricks Python OptimizationDatabricks Python 优化
【发布时间】:2022-01-07 15:12:12
【问题描述】:

我需要你的帮助,我在 python 中有一个简单的代码,它列出了 databricks 上所有数据库中表中的所有字段,有将近 90 个表,我想将结果保存在一个txt 或 csv 文件。这是使用的代码,但它需要 8 小时才能完成它太长了我该如何优化或有其他方法让它更快?

# table containing all name of database in databricks  
#df_tables = spark.sql("SELECT * FROM bd_xyh_name")
#DynoSQL is a string table for result in txt

def discribe():
  try: 
     for i in df_tables.collect():
        showTables="""show tables in {};""".format(i.nombd)
        df1=spark.sql(showTables)
        for j in df1.collect():
            describeTable="""describe table {0}.{1};""".format(j.database,j.tableName)
            df2=spark.sql(describeTable)
            #df3=df2.collect()
            df3 = df2.rdd.toLocalIterator()
            for k in df3:
              #df=df2.select(df2.col_name;k.data_type)
              #spark.sql("insert into NewTable VALUES ("+j.database+";"+j.tableName+";"+k.col_name+";"+k.data_type+");")
              spark.sql("insert into DynoSQL select \""+j.database+";"+j.tableName+";"+k.col_name+";"+k.data_type+"\"")
             # request="insert into NewTable VALUES ({};{};{};{});""".format(j.database,j.tableName,k.col_name,k.data_type)
              #spark.sql(request)
             
  except:
    raise

【问题讨论】:

  • 在这里发帖时请不要大喊大叫。它不会更快地为您提供帮助,并且全部大写的文本更难以阅读和理解。当您要求我们提供免费帮助以解决您的问题时,对我们大喊大叫也是相当不礼貌的。谢谢。
  • 如果取出spark.sql("insert into DynoSQL select需要多长时间?故障排除的第一步是将问题分解为多个部分并找出问题所在。m 另外...生成的 CSV 中有多少记录?有多少表和数据库?
  • @KenWhite 我不知道你在说什么我根本没有喊说它是免费的,我已经知道了,谢谢
  • 你的整个标题都是大写的,我把它删掉了。如果您不记得自己输入了什么内容,可以查看revision history
  • 是的,但是 CAPS 中的标题并不一定意味着我尖叫,在电子邮件中你对标题也这样做了,所以我不明白你为什么会这样解释,但还是谢谢你

标签: sql optimization pyspark databricks azure-databricks


【解决方案1】:

你可以试试下面的逻辑。

逻辑

  • 获取工作区中可用的数据库并生成list
  • 迭代数据库名称并获取数据库中可用的表并写入临时表。 (您应该将临时表创建为托管表)

优势:基于这个逻辑,一次只会处理一个数据库,如果在处理过程中失败,我们可以从失败databases开始,而不是整个工作空间级别。

代码片段

from pyspark.sql.types import *
import pyspark.sql.functions as f
from pyspark.sql import functions as F
from pyspark.sql.functions import col, concat, lit

df = spark.sql("show databases")
list = [x["databaseName"] for x in df.collect()]

for x in list:
    df = spark.sql(f"use {x}")
    df1 = spark.sql("show tables")
    df_loc.write.insertInto("writeintotable")
display(df1)

截图:

【讨论】:

  • 感谢您的回答,但这只会列出表格,我想在每个表格中查看列及其类型
  • 感谢您的确认。是的,阿里,我没有在这里给出完整的代码。这里只是给出一个逻辑。我的意思是,首先列出基于上述代码的所有数据库,并在该循环中迭代所有数据库,并通过该迭代获得所需的所有信息。如果您需要更多信息,请告诉我。
猜你喜欢
  • 2022-11-09
  • 2020-11-17
  • 1970-01-01
  • 2013-05-28
  • 2019-07-13
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多