下面是创建HIVE表并在其中加载数据的简单代码。
import java.util.Properties
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import org.apache.spark.sql.SQLContext
import sqlContext.implicits._
val conf = new SparkConf().setAppName("HIVE_Test").setMaster("local").set("spark.executor.memory","1g").set("spark.driver.allowMultipleContexts", "true");
val sc = new SparkContext(conf);
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc);
sqlContext.sql("CREATE TABLE test_amit_hive12(VND_ID INT,VND_NM STRING,VND_SHORT_NM STRING,VND_ADR_LN_1_TXT STRING,VND_ADR_LN_2_TXT STRING,VND_CITY_CD STRING,VND_ZIP_CD INT,LOAD_TS FLOAT,UPDT_TS FLOAT, PROMO_STTS_CD STRING, VND_STTS_CD STRING)");
sqlContext.sql("LOAD DATA LOCAL INPATH 'path_to/amitesh/part.txt' INTO TABLE test_amit_hive12");
exit()
我有2个查询::
1)在"创建表"中,我对表名进行了硬编码,但代码如何理解文件的分隔符?当我们通过HIVE提示创建一个HIVE表时,我们会写下以下几行
FIELDS TERMINATED BY ‘’
LINES TERMINATED BY ‘’
那么,在使用Spark / Scala时我们不需要这样做吗?
2)在通过Spark-shell执行代码时,我收到错误::
ERROR KeyProviderCache: Could not find uri with key [dfs.encryption.key.provider.uri] to create a keyProvider !!
res1: org.apache.spark.sql.DataFrame = [result: string]
我在stackoverflow上发现了一个帖子,但是没有答案。在其他网站上,我发现它是Hadoop 2.7.1的一个错误。我查了一下,我有2.7.2。那么,我的版本存在错误的可能性是什么。我正在使用IBM的BigInsight。以下是我的版本详情
Hadoop 2.7.2-IBM-12
但是,有没有人可以帮我解决这个问题,我必须有一个非常有力的证据证明这是我的经理的错误。
以下是人们说错误是错误的链接
答案 0 :(得分:2)
有点晚了,但这会解决你的问题吗?
得到了同样的错误,但对我来说这不是一个真正的问题。 错误后,代码运行得很好。有时它会弹出,有时则不会,因此它可能连接到我们集群中涉及特定Spark作业的执行程序节点。
它与Hadoop版本没有直接关系,但它基于您运行的Spark版本。
此处报告了错误和解决方案:https://issues.apache.org/jira/browse/SPARK-20594。
也就是说,升级到Spark 2.2.0可能会解决这个问题。