[英]Extract data from a Spark RDD, and populate a tuple in scala
我在 Hadoop/Spark 框架的頂部使用 Scala。
實際上我的數據是這種類型的:
RDD[(List[(String, Int)], Long)]
而且,這是此數據湖中前兩行的示例:
(List(("COD_LOCALE_PROGETTO",0), ("CUP",1), ("OC_TITOLO_PROGETTO",2), ("OC_SINTESI_PROGETTO",3), ("OC_LINK",4), ("OC_COD_CICLO",5), ("OC_DESCR_CICLO",6), ("OC_COD_TEMA_SINTETICO",7), ("OC_TEMA_SINTETICO",8), ("COD_GRANDE_PROGETTO",9), ("DESCRIZIONE_GRANDE_PROGETTO",10)),0)
(List(("10CAPORTO-POZZUOLI 1",0), ("J86G08000450003",1), ("INTERVENTO C11 2° LOTTO ¿ 1° STRALCIO FUNZIONALE ¿COLLEGAMENTO TRA TANGENZIALE DI NAPOLI (VIA CAMPANA), RETE VIARIA COSTIERA E PORTO DI POZZUOLI""",2), ("INTERVENTO C11 2° LOTTO ¿ 1° STRALCIO FUNZIONALE ¿COLLEGAMENTO TRA TANGENZIALE DI NAPOLI (VIA CAMPANA), RETE VIARIA COSTIERA E PORTO DI POZZUOLI""",3), ("www.opencoesione.gov.it/progetti/10caporto-pozzuoli-1",4), (1,5), ("Ciclo di programmazione 2007-2013",6), ("07",7), ("Trasporti e infrastrutture a rete",8), (" ",9), (" ",10)),1)
在實際情況下,每行持續 194 列,我總共有超過 160 萬條記錄。
使用此數據集,我想填充一個新列表,類型為:
List[(String, Int, Int, Int)]
其中第一個“Int”是每行的每個字段(COD_LOCALE_PROGETTO、CUP...),第二個字段是每個字段的大小(19、3、...)第三個是每個字段的位置, 已經編碼在變量中,就在字符串之后,最后一個“Int”是整個數據集中每一行的位置。
我試過這個腳本:
| val Dimensione = item._1.size;
| for(i <- 0 until Dimensione){
| ComponentiOpenCoesione :+= (item._1(i)._1.replace("\"","").toString,
| item._1(i)._1.replace("\"","").toString.size,
| item._1(i)._2.toInt,
| item._2.toLong)}
| })
但它失敗了,我稱之為“ComponentiOpenCoesione”的元組列表沒有填充。
最后,這個變量是這樣定義的:
var ComponentiOpenCoesione : List[(String, Int, Int, Long)] = List();
有人可以幫助我嗎? 我如何從 RDD 中提取數據並將其加載到列表中?
非常感謝。
在 Scala 中,返回函數的最后一條語句。 在這里,您的函數將不返回任何內容,因為它的最后一條語句是不返回任何內容的for
循環。
要糾正它,您只需將ComponentiOpenCoesione
作為您的最后一條語句。 所以,如果你只是打算映射你的RDD[(List[(String, Int)], Long)]
來得到RDD[List[(String, Int, Int, Long)]]
,你的代碼應該是:
rdd.map(item => {
var ComponentiOpenCoesione: List[(String, Int, Int, Long)] = List();
val Dimensione = item._1.size;
for (i <- 0 until Dimensione) {
ComponentiOpenCoesione :+= (item._1(i)._1.replace("\"", "").toString,
item._1(i)._1.replace("\"", "").toString.size,
item._1(i)._2.toInt,
item._2.toLong)
}
ComponentiOpenCoesione
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.