Невозможно выполнить запрос к таблице, созданной с помощью Spark, с помощью registerTempTable

Я выполнил ниже простой скрипт для создания временной таблицы в памяти с использованием контекста Spark SQL.

import sys.process._
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val zeppelinHome = ("pwd" !!).replace("\n","")
val bankText = sc.textFile(s"$zeppelinHome/data/bank-full.csv")

case class Bank(age:Integer, job:String, marital:String, education:String, balance:Integer)

val bank = bankText.map(s => s.split(";")).filter(s => s(0) != "\"age\"").map(
    s => Bank(s(0).toInt,
    s(1).replaceAll("\"",""),
    s(2).replaceAll("\"",""),
    s(3).replaceAll("\"",""),
    s(5).replaceAll("\"","").toInt
    )
).toDF()

bank.registerTempTable("bank_tbl")

Используя SparkSQL, я могу видеть и описывать таблицу, используя show tables и describe tables соответственно, но когда я пытаюсь выполнить запрос типа select job from bank where age > 35, это дает мне следующую ошибку:

org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://xxxxxxxxxx.xxxxxx.com:8020/home/zeppelin/data/bank-full.csv
    at org.apache.hadoop.mapred.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:285)
    at org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:228)
    at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:313)
    at org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:207)
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:219)
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:217)
    at scala.Option.getOrElse(Option.scala:120)
    at org.apache.spark.rdd.RDD.partitions(RDD.scala:217)
    at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:32)
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:219)
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:217)
    at scala.Option.getOrElse(Option.scala:120)
    at org.apache.spark.rdd.RDD.partitions(RDD.scala:217)
    at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:32)
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:219)
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:217)
    at scala.Option.getOrElse(Option.scala:120)
    at org.apache.spark.rdd.RDD.partitions(RDD.scala:217)
    at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:32)
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:219)
    at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:217)
    at scala.Option.getOrElse(Option.scala:120)
    at org.apache.spark.rdd.RDD.partitions(RDD.scala:217)

Я что-то упустил здесь?

Заранее спасибо, ребята!


person PRP    schedule 30.09.2015    source источник


Ответы (1)


Как вы можете видеть из

org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://cdtspcentral01d.rxcorp.com:8020/home/zeppelin/data/bank-full.csv

Файл не существует. Я предполагаю, что вы хотите, чтобы вместо этого он читал из локальной файловой системы.

val bankText = sc.textFile(s"file://$zeppelinHome/data/bank-full.csv")
person Reactormonk    schedule 30.09.2015
comment
Да, я хочу прочитать его из локальной файловой системы, и я прочитал его из локальной файловой системы, как вы можете видеть из моего кода Scala. Создается таблица с именем bank, которую я вижу с помощью запроса SparkSQL. Возвращаясь к моему вопросу, почему я получаю такую ​​ошибку, когда пытаюсь выполнить select запросы в SparkSQL? Почему он говорит Input path does not exist: hdfs://cdtspcentral01d.rxcorp.com:8020/home/zeppelin/data/bank-full.csv? - person PRP; 30.09.2015
comment
@PRP, потому что вы говорите ему смотреть на hdfs, не используя явно file://. - person Reactormonk; 30.09.2015