2017-02-09 10 views
0

Folks,Spark: Изменить CSV файл и записать в другую папку

У нас есть одно требование, где мы хотели сделать незначительные преобразования на CSV файл и записать то же самое в другую папку для HDFS с помощью искры.

/input/csv1.txt например (ГБ файла по меньшей мере, 4)

ID,Name,Address 
100,john,some street 

выход должен быть в файле (выход/csv1.txt). В основном две новые колонки будут добавлены после анализа адреса (Порядок записи должен быть таким же, как входной файл)

ID,Name,Address,Country,ZipCode 
100,Name,Address,India,560001 

Похоже, что нет легко сделать это с помощью искры.

ответ

1

Эмм, я не знаю, что вы подразумеваете под нет легкого способа - пакет spark-csv делает его очень легким ИМХО. В зависимости от того, какая версия Спарк вы работаете, вы должны выполнить одно из следующих действий:

Спарк 2.x

val df = spark.read.csv("/path/to/files/") 
df 
.withColumn("country", ...) 
.withColumn("zip_code", ...) 
.write 
.csv("/my/output/path/") 

Спарк 1.x

val df = sqlContext.read.format("com.databricks.spark.csv").load(/path/to/my/files/") 
df.  
.withColumn("country", ...) 
.withColumn("zip_code", ...) 
.write 
.format("com.databricks.spark.csv") 
.save("/my/output/path/") 

Обратите внимание, что я просто поместите здесь withColumn - вы, вероятно, присоединяетесь к другому файлу данных, содержащему страну и почтовый индекс, но мой пример - просто проиллюстрировать, как вы читаете и записываете его с помощью пакета spark-csv (который был встроен в Spark 2.x)

+0

Привет, Мы попытались запустить это, но мы получаем файлы PART (part-00000) в выходном каталоге. Вместо этого нам нужно получить имя файла, как в выходном каталоге. –