将几个变量从 scala / spark-shell 馈送到 hive 表

Posted

技术标签:

【中文标题】将几个变量从 scala / spark-shell 馈送到 hive 表【英文标题】:feeding several variables from scala / spark-shell to hive table 【发布时间】: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 表的素材。

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

真诚感谢任何帮助。

【问题讨论】:

【参考方案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)

以上是关于将几个变量从 scala / spark-shell 馈送到 hive 表的主要内容,如果未能解决你的问题,请参考以下文章

从Spark-Shell到SparkContext的函数调用路径过程分析(源码)

如何将命令行参数传递给 spark-shell scala 脚本?

在索引 spark-shell/scala 处更改 Array[StructField] 中的数据类型

spark-shell的Scala的一些方法详解

在spark-shell和Scala jars中用Kryo注册复杂的scala类。

解决SecureCRT下spark-shell中scala无法删除问题