【问题标题】:feeding several variables from scala / spark-shell to hive table将几个变量从 scala / spark-shell 馈送到 hive 表
【发布时间】:2016-02-19 12:07:38
【问题描述】:

我在 scala / spark-shell 中有 4 个变量。

S1 = (a string) = "age"
S2 = (another string) = "school"
D1 = (a double) = 0.50
D2 = (another double) = 0.75

我需要像这样把它喂给蜂巢表:

系数系数

年龄 0.50

学校 0.75

我能够从 scala/spark-shell 创建表:

val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)

//后续作品

hiveContext.sql("create table students_table (factor STRING, coeff FLOAT) stored as orc")

但是,我不知道如何将这些值插入到 hive 表中。

我玩过插入和更新语句。 我也玩过数据框。 我也尝试将数据转储到 hdfs 中的文本文件中(首先将它们转换为 RDD),但格式出来的方式使我无法将其用作 hive 表的素材。

我确信我错过了如何做到这一点的整个想法。

真诚感谢任何帮助。

【问题讨论】:

    标签: scala hadoop apache-spark hive apache-spark-sql


    【解决方案1】:
    val input = sc.parallelize(Array((s1,D1), (s2, D2)))
    case class StudentTable(factor : String, coeff : Double)
    import sqlContext.implicits._
    val df = input.map(x=>StudentTable(x._1, x._2)).toDF
    df.saveAsTable("students_table", org.apache.spark.sql.SaveMode.Append)
    

    【讨论】:

    • 输入:org.apache.spark.rdd.RDD[Any] = ParallelCollectionRDD[257] 在 :352 定义类 StudentTable :356 处并行化:错误:值 _1 不是Any val df = input.map(x=>StudentTable(x._1, x._2)).toDF 的成员
    • 我已经研究过这个错误,但我的头上。最好我能猜到它的一些排序类型不匹配。但两者都是字符串:-)
    • 我编辑了我的答案,这是一个错字。你能再检查一下吗?
    • 我认为它有效,但 VM 存在内存问题。重新启动。我会及时通知你
    • 您还应该将 (factor STRING, coeff FLOAT) 的数据类型更改为 (factor STRING, coeff Double)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多