sparkcore 将文本数据转化为表的映射关系

问答 yan ⋅ 于 2017-12-29 23:34:13 ⋅ 最后回复由 yan 2017-12-30 20:36:51 ⋅ 3356 阅读

用spark加载文本数据得到RDD[Array]如何将这个结构转化为RDD[表名,Map[列名,列值]]

成为第一个点赞的人吧 :bowtie:
回复数量: 7
  • 青牛 海汼部落创始人,80后程序员一枚,曾就职于金山,喜欢倒腾技术做产品
    2017-12-30 14:47:41

    你那数据是一个表的,还是多个表的?数据里有表名吗?

  • yan
    2017-12-30 14:51:00

    @青牛 是一个表的,数据里没有表名,自己添加表名作为key

  • 青牛 海汼部落创始人,80后程序员一枚,曾就职于金山,喜欢倒腾技术做产品
    2017-12-30 15:13:21

    那你用map转成pairRDD key为你定义的表名,做切分转成map结构当value不就行了

  • yan
    2017-12-30 15:37:44

    @青牛 转了之后是RDD[表名,Array[]]但我想要RDD[表名,Map[列名,值]]

  • 青牛 海汼部落创始人,80后程序员一枚,曾就职于金山,喜欢倒腾技术做产品
    2017-12-30 15:43:31

    你map之后返回元组 (表名,Map<列名,值>) 就会变成RDD[表名,Map[列名,值]],返回什么自己定不是非得Array

  • 青牛 海汼部落创始人,80后程序员一枚,曾就职于金山,喜欢倒腾技术做产品
    2017-12-30 16:43:43

    @yan 这个代码应该是你要的意思吧?

        val numbers = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
        val parallelize: RDD[Int] = sc.parallelize(numbers, 1)
        import scala.collection.mutable.HashMap
        val tableRdd: RDD[(String, HashMap[String, AnyVal])] = parallelize.map(f => {
          val map = new HashMap[String, AnyVal]()
          ("表名", map += "列名"-> f)
        })
        val tuples: Array[(String, mutable.HashMap[String, AnyVal])] = tableRdd.collect()
        for (a:(String, mutable.HashMap[String, AnyVal]) <- tuples){
          println("表名:" + a._1 + " 数据:" + a._2)
        }

    结果
    file

  • yan
    2017-12-30 20:36:50

    @青牛 是的,很强,谢谢啦

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
Ctrl+Enter