下面是创建配置单元表并在其中加载数据的简单代码。
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()
我有两个问题:
1) 在“createtable”中,我硬编码了表名,但是代码如何理解文件的分隔符呢?当我们通过配置单元提示符创建一个配置单元表时,我们会写以下几行
FIELDS TERMINATED BY ‘’
LINES TERMINATED BY ‘’
所以,我们在使用spark/scala时不需要这样做吗?
2) 在通过sparkshell执行代码时,出现以下错误:
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上找到一个帖子,但没有人回复。在另一个网站上,我发现这是hadoop2.7.1的一个bug。我查了我的,我有2.7.2。那么,我的版本中存在bug的可能性有多大呢。我正在使用ibms biginsight。以下是我的版本详细信息
Hadoop 2.7.2-IBM-12
但是,有没有人能帮我解决这个问题,我必须有一个非常有力的证据来证明这是一个错误,我的经理。
下面是一个链接,人们说错误是一个错误
`https://talendexpert.com/talend-spark-error/
1条答案
按热度按时间jmo0nnb31#
有点晚了,但这能解决你的问题吗?
我也犯了同样的错误,但对我来说并不是什么问题。出错后,代码运行正常。有时它会弹出,有时不会,所以它可能连接到集群上参与特定spark作业的executor节点。
它与hadoop版本没有直接关系,但是它基于您运行的spark版本。
错误和解决方案报告如下:https://issues.apache.org/jira/browse/spark-20594.
也就是说,升级到spark 2.2.0可能会解决这个问题。