簡體   English   中英

如何在 Apache Spark 中加載和寫入 Postgres 數據庫

[英]How to load and write to Postgres database in Apache Spark

我是 Apache Spark 的新手,我可以使用一些有關如何與 Postgres 數據庫交互的高級幫助。 我打算用 Java 編寫我的 Spark 工作。

在我的主應用程序中,我使用 Hibernate ORM 與數據庫交互。 該模式通常如下所示:

"pages" table
+----+---------+---------------+--------------------+-------------+
| id | content | lastaccessed  |        url         | pagerank_id |
+----+---------+---------------+--------------------+-------------+
|  1 | abc123  | 1511326589645 | http://google6.com | <TBD>       |
+----+---------+---------------+--------------------+-------------+

"outlinks" table ("inlinks" has same structure)
+---------+-------------------+
| page_id |     outlinks      |
+---------+-------------------+
|       1 | http://yahoo.com  |
|       1 | http://google.com |
+---------+-------------------+

所以頁面與內鏈和外鏈是一對多的關系,與 PageRank 是一對一的關系。

我想創建一個簡單的 Spark 作業來計算每個頁面的 PageRank,然后將該值寫入“pagerank”表並使用其在 pagerank 表中的相應值更新每個頁面的 pagerank_id。

我有幾個問題:

  1. 我可以使用 Hibernate 將 Postgres 數據加載到 Spark RDD 中嗎?
  2. 如果沒有,我必須使用類似DataFrameReader.jdbc()東西嗎? 如果是這種情況,我如何對頁面/輸入鏈接/輸出鏈接表進行聯合加載,以便我可以訪問具有一組輸入鏈接和輸出鏈接的頁面列表?
  3. 一旦我計算了每個頁面的 pagerank,我如何將值寫入“pagerank”表並使用 pagerank 表中的相應值更新每個頁面的 pagerank_id。

DataFrameReader 僅支持加載單個表。 因此,你的方法應該是

  1. 使用 DataFrameReader ,加載所有表(頁面/外鏈/內鏈)並創建單獨的數據集
  2. 加入並應用業務邏輯
  3. 使用 DataFrameWriter 將內容寫回 PostgreSQL

DataFrameWriter 不支持任何更新。 它可以附加到或覆蓋現有表。

一種方法可能是您可以創建一個臨時表,寫入數據,然后處理數據庫中的其余邏輯。

暫無
暫無

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

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