我正在尝试从spark程序加载一个hive表。 到目前为止,我使用spark shell将数据加载到Hive表中。在得知之后,我在日食上写了一个火花程序,你可以在下面看到。
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.SaveMode
object SuperSpark {
case class partclass(id:Int, name:String, salary:Int, dept:String, location:String)
def main(argds: Array[String]) {
val warehouseLocation = "file:${system:user.dir}/spark-warehouse"
val sparkSession = SparkSession.builder.master("local[2]").appName("Saving data into HiveTable using Spark")
.enableHiveSupport()
.config("hive.exec.dynamic.partition", "true")
.config("hive.exec.dynamic.partition.mode", "nonstrict")
.config("hive.metastore.warehouse.dir", "/user/hive/warehouse")
.config("spark.sql.warehouse.dir", warehouseLocation)
.getOrCreate()
import sparkSession.implicits._
val partfile = sparkSession.read.textFile("partfile")
val partdata = partfile.map(p => p.split(","))
val partRDD = partdata.map(line => partclass(line(0).toInt, line(1), line(2).toInt, line(3), line(4)))
val partDF = partRDD.toDF()
partDF.write.mode(SaveMode.Append).insertInto("parttab")
}
}
我感到困惑的地方是,
这些是我的pom.xml中的依赖项:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.1.1</version>
<scope>provided</scope>
</dependency>
有谁能告诉我如何进一步处理?
答案 0 :(得分:0)
我认为您需要提供Metastore uris。您有两种选择:
在运行spark应用程序的资源类路径中使用 hive-site.xml (如果您遵循标准maven结构,可以将其放在资源文件夹中):< / p>
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.1.134:9083</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
在您的spark代码中,使用以下属性配置 SparkSession 对象:
.config(“hive.metastore.uris”,“thrift://192.168.1.134:9083”)