簡體   English   中英

替代收集在spark sq中以獲取值列表或值映射

[英]alternative to collect in spark sq for getting list o map of values

基本上我的問題很籠統,每個人都告訴不要在Spark中使用collect,主要是當您想要一個巨大的數據框時,因為您可能會在內存中獲取驅動程序中的錯誤,但是在許多情況下,這是從數據框獲取數據的唯一方法在“實模式”下的列表o地圖帶有集合,這是矛盾的,我想知道我們有哪些替代選擇。

提前致謝。

感謝您的評論,我在這里回答。 是的,我知道,但是例如 我們有一個帶有一系列字段的數據框,其中一個用於鑲木地板文件中的分區。 現在,我想對鑲木地板中的文件進行重新處理,但是由於公司的體系結構,我們無法覆蓋,只能執行append(我知道WTF !!但我們不能更改它),因此我們首先需要分區的所有字段,用於建立包含將要刪除的路徑的列表。 在這種情況下,我將執行以下操作:

val twodrop: Array[Row] = df.select(partitionColumns.head, partitionColumns.tail: _*).distinct().collect()

twodrop.map(row => s"$outputPath${partitionColumns.map(colName => s"/$colName=${row.get(row.fieldIndex(colName))}").mkString}").toList

我不知道其他沒有收集方法。

另一個示例,如果我希望使用相同的子句在帶有數據幀的sparksql中使用isin子句,我們沒有其他方法,因為該子句僅接受List。 我知道我們可以進行left_outer連接,但是在這種情況下,我堅持認為,沒有其他方法可以不收集而收集集合中的所有分布式信息,但是如果使用它,則所有文檔,書籍,網站和示例都說同樣的事情:不要使用收集,確定,但是在這種情況下,他們該怎么辦?

謝謝。

暫無
暫無

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

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