Создание секционированной таблицы Hive с использованием существующего файла CSV - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь загрузить CSV-файл как секционированную таблицу Hive, используя Spark SQL и запустить благотворительный сервер.Вот что я попробовал:

def main(args: Array[String]): Unit = {
    val conf = new SparkConf
    conf
      .set("hive.server2.thrift.port", "10000")
      .set("spark.sql.hive.thriftServer.singleSession", "true")
      .set("spark.sql.warehouse.dir", "hdfs://sql/metadata/hive")
      .set("spark.sql.catalogImplementation","hive")
      .set("skip.header.line.count","1")
      .setMaster("local[*]")
      .setAppName("ThriftServer")
    val sc = new SparkContext(conf)
    val spark = SparkSession.builder()
      .config(conf)
      .enableHiveSupport()
      .getOrCreate()    

    spark.sql(
      "CREATE TABLE IF NOT EXISTS freq (" +
        "time_stamp bigint," +
        "time_quality string )" +
        "PARTITIONED BY (id int) "
        "ROW FORMAT DELIMITED " +
        "FIELDS TERMINATED BY ',' " +
        "STORED AS TEXTFILE " +
        "LOCATION 'Path_to_CSV_file' " +
        "TBLPROPERTIES(skip.header.line.count = 1)"
    )

Используя приведенный выше код, таблица freq будет создана, и в нее будут загружены данные, но она не разбита на разделы на основе столбца id .Я также пытался изменить таблицу или вставить данные на основе ключа раздела, но это не удалось.

Изменить таблицу:

spark.sql("ALTER TABLE freq ADD PARTITION (id) " +
      "LOCATION 'PATH_TO_CSV_FILE' ")
ERROR: Found an empty partition key 'id'.(line 1, pos 33)

== SQL ==
ALTER TABLE freq ADD PARTITION (id) LOCATION 'Path_To_CSV_File'

Вставить таблицу:

spark.sql(
      "INSERT OVERWRITE TABLE freq PARTITION (id) " +
      "SELECT * " +
      "FROM freq"
    )
ERROR: Exception in thread "main" org.apache.spark.sql.AnalysisException: id is not a valid partition column in table `database`.`freq`.;

ПервыйВопрос в том, как правильно создать секционированную таблицу с использованием SparkSQL и Hive?

Кроме того, поскольку у меня есть данные в CSV-файле заранее, я не хочу создавать их копию (из-заограничение емкости), и я хочу иметь только одну копию этого (независимо от формы файла CSV или в форме подкаталогов раздела Hive).Возможно ли это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...