簡體   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