【发布时间】:2017-10-10 07:29:35
【问题描述】:
我是 Spark 和 Scala 的新手,所以我有一个非常基本的问题。我有 Spark 1.5.2 和 Scala 2.10.4。我创建的配置允许我在使用--config 命令启动spark-shell 时直接从ES 获取一些数据作为JSON;我还导入了elasticsearch-hadoop 的--jar。启动 Spark 后,我执行了以下操作:
import org.elasticsearch.spark._
val rdd = sc.esRDD("my-index")
如果我这样做rdd.getClass,我会得到以下结果:
res9: Class[_ <: org.apache.spark.rdd.RDD[(String, scala.collection.Map[String,AnyRef])]] = class org.elasticsearch.spark.rdd.ScalaEsRDD
我想这意味着我有一个带有字符串(文档 ID,我不需要它)和地图(JSON 本身)的元组列表。
现在我想用 JSON 提取 Map,创建一个模式并将数据以 Avro 格式放入 HDFS。
我尝试通过 val rdd_res = rdd.take(10) 获取仅 10 条记录用于测试目的,而 rdd_res.getClass 我得到了
res11: Class[_ <: Array[(String, scala.collection.Map[String,AnyRef])]] = class [Lscala.Tuple2
由于我对 Spark 和 Scala 缺乏经验,所以我很困惑。如何从数组的每个值中提取地图?接下来,如何将结果作为 Avro 保存到 HDFS?
提前感谢您的宝贵时间。
【问题讨论】:
-
欢迎部分解决方案或建议!
标签: scala apache-spark rdd