При записи с помощью Spark SQL печатаются несколько строк заголовка

Я использую Spark SQL для загрузки больших файлов CSV и объединения их в общий столбец. После выполнения соединения в моем коде я хотел бы сохранить таблицу обратно в новый файл CSV. Для этого я использую метод write() в DataFrame. При просмотре файла я был удивлен, увидев, что заголовок распечатывается несколько раз, за ​​ним следуют данные, а за ними - другие заголовки. Например:

name, age, addr, job, salary
name, age, addr, job, salary
name, age, addr, job, salary

Bob, 34, 123 Fake St, Programmer, 10000000
June, 23, 5 Tree Ave., College Student, 15000
Rick, 12, 43 Ware St., Student, 0

name, age, addr, job, salary
name, age, addr, job, salary
name, age, addr, job, salary

<more data here>

Этот вывод является неожиданным, особенно потому, что метод show() класса DataFrame выводит таблицу на консоль и отображает то, что я ожидал.

Код, который я использую для записи:

bigTable.write().mode(SaveMode.Overwrite).format("com.databricks.spark.csv")
            .option("header", "true").save(settings.getValue().outputDir  +"/bigTable.csv");

При использовании настройки option("header", "false") значения данных правильно сохраняются в CSV. Это ошибка?


person dmux    schedule 07.04.2016    source источник
comment
какие исходные файлы csv? как вы их читаете с помощью spark-csv?   -  person Milad Khajavi    schedule 07.04.2016
comment
Причина, по которой @MiladKhajavi спрашивает, заключается в том, что если это текстовые файлы, и вы смотрите на них с помощью hadoop fs -text / my / dir / *, у вас, вероятно, есть несколько файлов, следовательно, несколько заголовков.   -  person Roberto Congiu    schedule 07.04.2016
comment
@MiladKhajavi, я читаю их с помощью Spark SQL (в частности, с помощью API Databricks). Я читаю из нескольких файлов CSV, но объединяю их вместе с помощью фреймов данных Spark SQL. Я ожидал, что после их присоединения будет только 1 строка заголовка.   -  person dmux    schedule 08.04.2016


Ответы (1)


Я считаю, что нашел решение, используя функции partition() и coalesce():

bigTable.repartition(1).coalesce(1).write().format("com.databricks.spark.csv").option("header", "true").save("myoutputfile.csv");

После добавления этих вызовов файл CSV имеет ожидаемый результат.

person dmux    schedule 08.04.2016