从schemaRDD重新映射列

时间:2014-11-25 15:21:45

标签: scala apache-spark

我正在从json文件中选择列,转换它们中的一些,并希望将结果存储为镶木地板文件,但我失败了。

这就是我正在做的事情:

val jsonFiles=sqlContext.jsonFile("/requests.loading")
jsonFiles.registerTempTable("jRequests")

val clean_jRequests=sqlContext.sql("select c1, c2, c3 ... c55 from jRequests")

然后我运行一张地图:

val jRequests_flat=clean_jRequests.map(line=>{((line(1),line(2),line(3),line(4),line(5),line(6),line(7),line(8).asInstanceOf[Iterable[String]].mkString(","),line(9) ,line(10) ,line(11) ,line(12) ,line(13) ,line(14) ,line(15) ,line(16) ,line(17) ,line(18) ,line(19) ,line(20) ,line(21) ,line(22) ,line(23) ,line(24) ,line(25) ,line(26) ,line(27) ,line(28) ,line(29) ,line(30) ,line(31) ,line(32) ,line(33) ,line(34) ,line(35) ,line(36) ,line(37) ,line(38) ,line(39) ,line(40) ,line(41) ,line(42) ,line(43) ,line(44) ,line(45) ,line(46) ,line(47) ,line(48) ,line(49) ,line(50)))})
  1. 是否有更明智的方法来实现这一目标(只修改某个专栏而不与其他专栏相关,但保留所有专栏)?
  2. 最后一个语句失败,因为元组有太多成员: :19:错误:对象Tuple50不是包scala的成员

  3. 谢谢,
    丹尼尔

1 个答案:

答案 0 :(得分:0)

你需要所有55列吗?

您可以创建一个只包含所需列的案例类并保存此子集。

当然,如果您将来需要,请保留包含所有数据的原始文件。

您收到Tuple50错误,因为您在Scala中达到22元组限制 - 请参阅Why does the Scala library only defines tuples up to Tuple22?