Spark sql从工人查询Hive表

时间:2017-10-28 09:07:14

标签: apache-spark hive apache-spark-sql

我正在尝试从Spark中的地图操作查询Hive表,但是当它运行查询时执行被冻结。

这是我的测试代码

val sc = new SparkContext(conf)
val datasetPath = "npiCodesMin.csv"
val sparkSession = SparkSession.builder().enableHiveSupport().getOrCreate()

val df = sparkSession.read.option("header", true).option("sep", ",").csv(datasetPath)
df.createOrReplaceTempView("npicodesTmp")
sparkSession.sql("DROP TABLE IF EXISTS npicodes");
sparkSession.sql("CREATE TABLE npicodes AS SELECT * FROM npicodesTmp");

val res = sparkSession.sql("SELECT * FROM npicodes WHERE NPI = '1588667638'") //This works
println(res.first())

val NPIs = sc.parallelize(List("1679576722", "1588667638", "1306849450", "1932102084"))//Some existing NPIs

val rows = NPIs.mapPartitions{ partition =>
  val sparkSession = SparkSession.builder().enableHiveSupport().getOrCreate()
  partition.map{code =>
    val res = sparkSession.sql("SELECT * FROM npicodes WHERE NPI = '"+code+"'")//The program stops here
    res.first()
  }
}

rows.collect().foreach(println)

它从CSV加载数据,创建一个新的Hive表并用CSV数据填充它。 然后,如果我从主查询表中它完美地工作,但如果我尝试在地图操作中执行该操作,则执行将被冻结。 它不会产生任何错误,它会继续运行而不会做任何事情。

Spark UI显示了这种情况 Spark UI

实际上,我不确定我是否可以以分布式方式查询表,我在文档中找不到它。 有什么建议吗?

感谢。

0 个答案:

没有答案