簡體   English   中英

如何在 Databricks (Python) 上運行 ETL 管道

[英]How to run ETL pipeline on Databricks (Python)

我正在嘗試使用 kinesis 數據流和使用 spark 的數據塊筆記本創建實時情緒分析 model。 我注意到執行數據轉換、構建 model、分析情緒以及將數據發送到數據庫的代碼塊只運行一次,但我希望這些代碼塊持續運行,直到我決定停止執行。 數據塊中有沒有辦法讓代碼塊連續運行,直到用戶決定終止執行?

我嘗試將我的筆記本作為一項工作來運行,但處理火花流的代碼塊只會永遠運行,並且永遠不會允許其他代碼塊完成 ETL 過程。

這是我如何設置我的 spark stream 的問題嗎? 這是我如何設置它的代碼:

kinesisDF = spark \
  .readStream \
  .format("kinesis") \
  .option("streamName", kinesisStreamName)\
  .option("region", kinesisRegion) \
  .option("initialPosition", "latest") \
  .option("format", "json") \
  .option("awsAccessKey", awsAccessKeyId)\
  .option("awsSecretKey", awsSecretKey) \
  .option("inferSchema", "true") \
  .load()
df = kinesisDF \
  .writeStream \
  .format("memory") \
  .outputMode("append") \
  .queryName("tweets")  \
  .start()

上面的代碼塊(.start)是當我嘗試將筆記本作為作業運行並且不允許其他代碼塊執行時連續運行的代碼塊。 PS我對databricks和spark很陌生

我認為您需要按照https://docs.databricks.com/spark/latest/structured-streaming/examples.html#write-to-amazon-dynamodb-using-foreach-in遵循 Dynamo DB as Sink 的方法-scala-and-python使用foreach

從數據庫手冊開始 - 專注於foreach

from pyspark.sql.functions import *

spark.conf.set("spark.sql.shuffle.partitions", "1")

query = (
  spark.readStream.format("rate").load()
       .selectExpr("value % 10 as key")
       .groupBy("key")
       .count()
       .toDF("key", "count")
       .writeStream
       .foreach(SendToDynamoDB_ForeachWriter())
      #.foreach(sendToDynamoDB_simple)  // alternative, use one or the other
       .outputMode("update")
       .start()'
)

streamingDF.writeStream.foreach() 允許您將流式查詢的 output 寫入任意位置。 這就是這里的線索。

在 Python 中編碼 ETL forms 可以采用多種結構,這取決於專門的先決條件、業務目標、現有工具適合哪些庫,以及設計師認為他們必須在沒有任何准備的情況下工作的程度。 Python 的特性在於處理記錄的信息結構和單詞引用,這在 ETL 任務中很重要。

Python 具有足夠的適應性,客戶幾乎可以使用本地信息結構編寫任何 ETL 過程。 例如,在固有的 Python 數學模塊的幫助下,通過綱要篩選無效質量很簡單:

導入數學數據 = [1.0, 3.0, 6.5, float('NaN'), 40.0, float('NaN')] 過濾 = [] 對於數據中的值:如果不是 math.isnan(value):filtered.append(value )

在沒有任何准備的情況下對整個 ETL 過程進行編碼並不是特別精通,因此大多數 ETL 代碼最終都是純粹的 Python 代碼和遠程特征能力或文章的混合,例如,來自之前引用的庫的那些。 例如,客戶端可以利用 pandas 引導包含空值的整個 DataFrame 行:

篩選 = data.dropna()

Python 編程改進包 (SDK)、應用程序編程接口 (API) 和不同的實用程序可用於某些階段,其中一些可能有助於 ETL 編碼。 例如,Anaconda 階段是 Python 對處理信息很重要的模塊和庫的挪用。 它結合了自己的包主管和雲促進共享代碼便箋和 Python 條件。

Python 中大部分代碼的重要部分建議也適用於 ETL 編程。 例如,代碼應該是“Pythonic”——這意味着開發人員應該遵循一些語言明確的規則,使內容緊湊清晰,並符合軟件工程師的目標。 文檔也很重要,就像捆綁電路板並留意條件一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM