繁体   English   中英

Databricks Python 优化

[英]Databricks Python Optimization

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

#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```

您可以尝试以下逻辑。

逻辑

  • 获取工作区中可用的数据库并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)

截屏:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM