我正在尝试使用我的HiveContext运行一个insert语句,如下所示:
hiveContext.sql('insert into my_table (id, score) values (1, 10)')
Run Code Online (Sandbox Code Playgroud)
在1.5.2星火SQL文件没有明确说明这是否是支持或不,虽然它不支持"动态分区插入".
这导致堆栈跟踪像
AnalysisException:
Unsupported language features in query: insert into my_table (id, score) values (1, 10)
TOK_QUERY 0, 0,20, 0
TOK_FROM 0, -1,20, 0
TOK_VIRTUAL_TABLE 0, -1,20, 0
TOK_VIRTUAL_TABREF 0, -1,-1, 0
TOK_ANONYMOUS 0, -1,-1, 0
TOK_VALUES_TABLE 1, 13,20, 41
TOK_VALUE_ROW 1, 15,20, 41
1 1, 16,16, 41
10 1, 19,19, 44
TOK_INSERT 1, 0,-1, 12
TOK_INSERT_INTO 1, 0,11, 12
TOK_TAB 1, 4,4, 12
TOK_TABNAME 1, 4,4, 12
my_table …
Run Code Online (Sandbox Code Playgroud) apache-spark apache-spark-sql pyspark apache-spark-1.5 hivecontext
我将外部配置单元表存储为Parquet,在列上进行了分区,as_of_dt
并通过Spark Streaming插入了数据。现在每天都会添加新分区。我这样做是为了 msck repair table
使配置单元metastore获取新添加的分区信息。这是唯一的方法还是有更好的方法?我担心下游用户查询表是否会msck repair
导致数据不可用或陈旧数据出现任何问题?我正在浏览 HiveContext
API并查看refreshTable
选项。知道使用它是否有意义refreshTable
?
我试图在单元测试中这样做:
val sConf = new SparkConf()
.setAppName("RandomAppName")
.setMaster("local")
val sc = new SparkContext(sConf)
val sqlContext = new TestHiveContext(sc) // tried new HiveContext(sc) as well
Run Code Online (Sandbox Code Playgroud)
但我明白了:
[scalatest] Exception encountered when invoking run on a nested suite - java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient *** ABORTED ***
[scalatest] java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient
[scalatest] at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:346)
[scalatest] at org.apache.spark.sql.hive.client.ClientWrapper.<init>(ClientWrapper.scala:120)
[scalatest] at org.apache.spark.sql.hive.HiveContext.executionHive$lzycompute(HiveContext.scala:163)
[scalatest] at org.apache.spark.sql.hive.HiveContext.executionHive(HiveContext.scala:161)
[scalatest] at org.apache.spark.sql.hive.HiveContext.<init>(HiveContext.scala:168)
[scalatest] at org.apache.spark.sql.hive.test.TestHiveContext.<init>(TestHive.scala:72)
[scalatest] at mypackage.NewHiveTest.beforeAll(NewHiveTest.scala:48)
[scalatest] at org.scalatest.BeforeAndAfterAll$class.beforeAll(BeforeAndAfterAll.scala:187)
[scalatest] at mypackage.NewHiveTest.beforeAll(NewHiveTest.scala:35)
[scalatest] at …
Run Code Online (Sandbox Code Playgroud) 我想更新 orc 格式的 hive 表,我可以从 ambari hive 视图进行更新,但无法从 sacla (spark-shell) 运行相同的更新语句
objHiveContext.sql("select * from table_name ") 能够看到数据,但是当我运行时
objHiveContext.sql("update table_name set column_name='testing' ") 无法运行,一些 Noviable 异常(更新附近的语法无效等)发生在我能够从 Ambari 视图更新的地方(因为我设置了所有必需的配置)即 TBLPROPERTIES "orc.compress"="NONE" 事务 true 等)
尝试使用 Insert into using case 语句,但都失败了 我们可以从 Spark 更新 hive ORC 表吗?如果是的话,程序是什么?
下面导入
import org.apache.spark.SparkConf
import org.apache.spark.SparkConf
import org.apache.spark._
import org.apache.spark.sql._
import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.sql.hive.orc._
Run Code Online (Sandbox Code Playgroud)
注意:我没有在该表上应用任何分区或分桶如果我应用分桶,当存储为 ORC Hive 版本:1.2.1 Spark 版本:1.4.1 Scala 版本:2.10.6 时,我什至无法查看数据
我尝试使用spark和scala中的下面代码,附加代码和pom.xml
package com.Spark.ConnectToHadoop
import org.apache.spark.SparkConf
import org.apache.spark.SparkConf
import org.apache.spark._
import org.apache.spark.sql._
import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.sql.SQLContext
import org.apache.spark.rdd.RDD
//import groovy.sql.Sql.CreateStatementCommand
//import org.apache.spark.SparkConf
object CountWords {
def main(args:Array[String]){
val objConf = new SparkConf().setAppName("Spark Connection").setMaster("spark://IP:7077")
var sc = new SparkContext(objConf)
val objHiveContext = new HiveContext(sc)
objHiveContext.sql("USE test")
var test= objHiveContext.sql("show tables")
var i = 0
var testing = test.collect()
for(i<-0 until testing.length){
println(testing(i))
}
}
}
Run Code Online (Sandbox Code Playgroud)
我添加了spark-core_2.10,spark-catalyst_2.10,spark-sql_2.10,spark-hive_2.10依赖项我是否需要添加更多依赖项???
编辑:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.Sudhir.Maven1</groupId>
<artifactId>SparkDemo</artifactId>
<version>IntervalMeterData1</version>
<packaging>jar</packaging>
<name>SparkDemo</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spark.version>1.5.2</spark.version> …
Run Code Online (Sandbox Code Playgroud) 在 spark-shell (scala) 中,我们导入 org.apache.spark.sql.hive.thriftserver._ 以编程方式为特定的 hive 上下文启动 Hive Thrift 服务器作为 HiveThriftServer2.startWithContext(hiveContext) 以公开注册的临时表那个特定的会议。
我们如何使用 python 做同样的事情?python 上是否有用于导入 HiveThriftServer 的包/api?任何其他想法/建议表示赞赏。
我们已经使用 pyspark 创建了一个数据框
谢谢
拉维·纳拉亚南
我想在 HiveContext 中使用 PySpark 应用 SCD1 和 SCD2。在我的方法中,我正在读取增量数据和目标表。阅读后,我将加入他们的更新插入方法。我正在对所有源数据帧进行 registerTempTable。我正在尝试将最终数据集写入目标表,但面临着在从中读取的表中不可能插入覆盖的问题。
请为此提出一些解决方案。我不想将中间数据写入物理表并再次读取它。
是否有任何属性或方法可以存储最终数据集而不保留对其读取的表的依赖性。这样,就有可能覆盖该表。
请建议。
我正在尝试使用Spark中的HiveContext访问hive中映射的hbase表.但是我得到了ClassNotFoundException
例外.下面是我的代码.
import org.apache.spark.sql.hive.HiveContext
val sqlContext = new HiveContext(sc)
val df = sqlContext.sql("select * from dbn.hvehbasetable")
Run Code Online (Sandbox Code Playgroud)
我收到以下错误..
17/06/22 07:17:30错误日志:initSerDe中的错误:java.lang.ClassNotFoundException未找到类org.apache.hadoop.hive.hbase.HBaseSerDe java.lang.ClassNotFoundException:类org.apache.hadoop.hive在org.apache的org.apache.hadoop.conf.Contaiguration.hadoop.hive.metastore.MetaStoreUtils.getDeserializer(MetaStoreUtils.java:385)的org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2120)找不到.hbase.HBaseSerDe位于org.apache.hadoop.hive的org.apache.hadoop.hive.ql.metadata.Table.getDeserializer(Table.java:258)的.hadoop.hive.ql.metadata.Table.getDeserializerFromMetaStore(Table.java:276) .g.apache.spark.cl.位于org.apache.spark的scala.Option.map(Option.scala:145)的.apache.spark.sql.hive.client.ClientWrapper $$ anonfun $ getTableOption $ 1 $$ anonfun $ 3.apply(ClientWrapper.scala:337) .sql.hive.client.ClientWrapper $$ anonfun $ getTableOption $ 1.适用(ClientWrapp er.scala:337)org.apache.spark.sql.hive.client.ClientWrapper $$ anonfun $ getTableOption $ 1.apply(ClientWrapper.scala:332)at org.apache.spark.sql.hive.client.ClientWrapper $ $ anonfun $ withHiveState $ 1.apply(ClientWrapper.scala:290)at org.apache.spark.sql.hive.client.ClientWrapper.liftedTree1 $ 1(ClientWrapper.scala:237)
任何人都可以帮助我导入哪些类来读取hbase表.
我正在使用 HQL 查询,其中包含类似于...
INSERT OVERWRITE TABLE ex_tb.ex_orc_tb
select *, SUBSTR(INPUT__FILE__NAME,60,4), CONCAT_WS('-', SUBSTR(INPUT__FILE__NAME,71,4), SUBSTR(INPUT__FILE__NAME,75,2), SUBSTR(INPUT__FILE__NAME,77,2))
from ex_db.ex_ext_tb
Run Code Online (Sandbox Code Playgroud)
当我进入 hive 并使用该命令时,它工作正常。
当我把它放入一个 pyspark, hivecontext 命令时,我得到了错误......
pyspark.sql.utils.AnalysisException: u"cannot resolve 'INPUT__FILE__NAME' given input columns: [list_name, name, day, link_params, id, template]; line 2 pos 17"
Run Code Online (Sandbox Code Playgroud)
任何想法为什么会这样?
我有以下sparkdataframe:
id weekly_sale
1 40000
2 120000
3 135000
4 211000
5 215000
6 331000
7 337000
Run Code Online (Sandbox Code Playgroud)
我需要查看weekly_sale列中以下哪些间隔项属于:
under 100000
between 100000 and 200000
between 200000 and 300000
more than 300000
Run Code Online (Sandbox Code Playgroud)
所以我想要的输出将是:
id weekly_sale label
1 40000 under 100000
2 120000 between 100000 and 200000
3 135000 between 100000 and 200000
4 211000 between 200000 and 300000
5 215000 between 200000 and 300000
6 331000 more than 300000
7 337000 more than 300000
Run Code Online (Sandbox Code Playgroud)
任何pyspark,spark.sql和Hive上下文实现都将对我有所帮助。
hivecontext ×10
apache-spark ×9
hive ×4
pyspark ×4
scala ×4
dataframe ×1
hbase ×1
hiveql ×1
hql ×1
maven ×1
python ×1
spark-submit ×1
sql ×1
thrift ×1