如何直接从Hive表创建RDD?

时间:2019-03-07 17:10:57

标签: scala apache-spark hive rdd hiveql

我正在学习spark并使用SparkContext对象并使用一些本地文件s3和hdfs创建rdd,如下所示:

support itemsets length
0   0.8 frozenset({'Eggs'}) 1
5   0.8 frozenset({'Eggs', 'Kidney Beans'}) 2
6   0.6 frozenset({'Onion', 'Eggs'}) 2
10  0.6 frozenset({'Onion', 'Eggs', 'Kidney Beans'}) 3

现在我在Hive表中有一些数据。是否可以直接加载配置单元表并将该数据用作RDD?

2 个答案:

答案 0 :(得分:0)

可以使用HiveContext完成以下操作:

val hiveContext = HiveContext(sc);
val rows = hiveContext.sql("Select name, age from students")

答案 1 :(得分:0)

RDD现在已过时。您可以使用新的spark API将数据直接从Hive表读取到DataFrames。这是Spark版本2.3.0的链接(根据您的安装更改版本。)

https://spark.apache.org/docs/2.3.0/sql-programming-guide.html#hive-tables

这是一个示例程序。您可以将最后一行的结果存储到DataFrame中,并执行通常在RDD上执行的各种操作,例如地图,过滤器。

//Accessing Hive tables from Spark
import java.io.File
import org.apache.spark.sql.{Row, SaveMode, SparkSession}
case class People(name:String,age:Int,city:String,state:String,height:Double,weight:Double)
val warehouseLocation = new File("spark-warehouse").getAbsolutePath
val spark = SparkSession.builder.master("yarn").appName("My Hive 
 App").config("spark.sql.warehouse.dir", warehouseLocation)
  .enableHiveSupport()
  .getOrCreate()
import spark.implicits._
import spark.sql
sql("CREATE TABLE IF NOT EXISTS people(name String,age Int,city String,state String,height Double,weight Double)  ROW FORMAT DELIMITED FIELDS TERMINATED BY ','")
sql("LOAD DATA LOCAL INPATH 'file:/home/amalprakash32203955/data/people1.txt' INTO TABLE people")
sql("SELECT * FROM people").show()