gpt4 book ai didi

scala - 在加载语句中期望 StringLiteral 接近 'inpath'

转载 作者:可可西里 更新时间:2023-11-01 16:37:42 28 4
gpt4 key购买 nike

我是 hadoop 和 hive 的新手。我正在尝试将数据加载到配置单元表中,但遇到以下错误。

另一方面,我尝试使用语句 stmt.execute("INSERT INTO employee VALUES(1201,'Gopal',45000,'Technical manager')") 将记录插入配置单元表>它成功地插入了记录,但是在加载大量数据时却失败了。

val filePath=C:\\AllProjects\\xxxxxxx\\src\\main\\resources\\input\\sample.txt
val con =
DriverManager.getConnection("jdbc:hive2://xxxxxhive.xxxx.com:10000/dehl_dop;principal=hive/xxxxxhive.com.com@internal.xxxxx.com;" +
"mapred.job.queue.name=usa;AuthMech=3;SSL=1;user=zzzz;password=vvvv;" +
"SSLTrustStore=C:\\Program Files\\Java\\jre1.8.0_144\\lib\\security\\hjsecacerts;UseNativeQuery=0")
val stmt = con.createStatement()
print("\n" + "executing the query" +"\n")
stmt.execute(s"load data inpath $filePath into table Employee")

错误

errorMessage:Error while compiling statement: FAILED: ParseException line 1:17 mismatched input 'C' expecting StringLiteral near 'inpath' in load statement), Query: load data inpath C:\xxxxx\xxxxx\xxxxx\xxxxx\xxxxx\xxxxx\sample.txt into table Employee.

任何帮助将不胜感激

最佳答案

LOAD DATA INPATH 采用字符串文字。

$filePath 需要用单引号括起来

stmt.execute(s"load data inpath '$filePath' into table Employee")

但是,该命令需要一个文件位于 HDFS 上。你正在从你的 C 驱动器读取

LOAD DATA LOCAL INPATH 将读取local 文件系统,但我不确定它如何在 JDBC 上工作,因为它取决于查询实际执行的位置(您的本地机器,或 HiveServer)

我建议您在特定的 HDFS 位置创建一个具有必要模式的外部 Hive 表,然后只需将文本文件直接复制到 HDFS。

以编程方式将文件复制到 HDFS 是一种选择,但 hadoop fs -put 会更简单。

如果您只想将本地文件加载到 HDFS/Hive,Spark 比 JDBC 更有意义

import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder()
.appName("Sample App").enableHiveSupport().getOrCreate()

val df = spark.read.option("header", "false").csv(filePath)
df.createOrReplaceTempView("emp")
spark.sql("INSERT INTO dehl_dop.Employee SELECT * from emp")

关于scala - 在加载语句中期望 StringLiteral 接近 'inpath',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48630888/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com