簡體   English   中英

從 Spark RDD 中提取數據,並在 Scala 中填充元組

[英]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
})

您可以查看Scala中的返回問題的答案,以了解如何在 Scala中返回值。

暫無
暫無

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

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