当前位置: 首页 > 知识库问答 >
问题:

从Spark RDD中提取数据,并在scala中填充元组

柯星华
2023-03-14

我在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中提取数据并加载到列表中?

非常感谢。

共有1个答案

孟思远
2023-03-14

在 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中的Return问题的答案,了解如何在Scala中返回值。

 类似资料:
  • 问题内容: 我创建了一个GUI,并在外部获取了一个数据库。我正在NetBeans中使用GUI构建器来执行此操作。有谁知道用来自数据库的值填充jComboBox的简单方法吗?当我运行项目时,没有错误,但组合框保持为空。 这是设置带有折扣名称的组合框的代码: 它位于与jComboBox对象不同的类中。此类称为模型。 这是我以称为DiscountGUIView的形式调用setDiscountNames方

  • 我有一个图像的数据在字节数组中()。我想获取它的元数据,例如: null 我怎么能这么做?如果有图书馆需要我了解,请告诉我。 我发现从JPEG中获取字节数组形式的元数据,但它说它与JPEG图像相关。我想对所有图像都这样做。而且,它也没有解释它是如何工作的。

  • 我有以下数据结构: 我想把它取出来。以下是我在没有任何运气的情况下正在做的事情: 那我该怎么做? P、 实际上,那是https://github.com/json4s/json4s但这并不重要,因为lift在json提取方面有相同的API。 更新:可能需要使用转换方法。我将如何使用它? 更新2:

  • series(string $value,[ string $categories]) string $value $config = ['path' => './tests']; ​ $fileObject = new \Vtiful\Kernel\Excel($config); ​ $fileObject = $fileObject->fileName('tutorial.xlsx'); $

  • factory 辅助函数 必须 使用 factory 方法来做数据填充,因为是框架提倡的,并且可以同时为测试代码服务。 运行效率 开发数据填充时,必须 特别注意 php artisan db:seed 的运行效率,否则随着项目的代码量越来越大,db:seed 的运行时间会变得越来越长,有些项目多达几分钟甚至几十分钟。 原则是: Keep it lighting speed. 只有当 db:seed

  • 我在NetBeans IDE中工作,语言是Java,主要的类是JFrame Form。 我需要从Jtable获取所有数据并用这些数据填充数组。数组代表矩阵。 代码如下 我有一个错误 线程“AWT-EventQueue-0”java.lang.ClassCastException:java.lang.String无法转换为java.lang.Double 所以将表中的元素设置为双精度不是那么容易吗?