2016-01-11 6 views
1

Я пытаюсь изменить заголовки очень большого CSV-файла.SparkSQL, Spark DataFrame: пакетное переименование заголовков csv

Я использую SparkSQL

Все заголовки имеют some_string в имени каждого заголовка, как some_string.header_name

Моя конфигурация Спарк conf = SparkConf().setMaster("local[*]").setAppName("readCSV")

Для чтения файла CSV Я использую com.databricks.spark.csv package

logs_df = sqlContext.load(
    source = "com.databricks.spark.csv", 
    header = 'true', 
    inferSchema ='true', 
    path = 'my_file.csv' 
) 

мой код

header = logs_df.first() 
schemaString = header.replace('`some_string.`','') 

ошибка продукции:

AttributeError        
    Traceback (most recent call last) 
    <ipython-input-63-ccfad59fc785> in <module>() 

    1255    raise AttributeError(item) 
    1256   except ValueError: 
-> 1257    raise AttributeError(item) 
    1258 
    1259  def __setattr__(self, key, value): 

AttributeError: replace 

Я не люблю использовать logs_df.withColumnRenamed(), потому что у меня есть более 200 столбцов

Очень appricciate для любой идеи, как изменить заголовки быстро и эффективно

ответ

1

Я не знаю Python, чтобы дать вам пример фрагмента кода. Надеюсь, это может дать вам несколько советов для Python ... Вариант 1: Я могу предложить сделать это с помощью RDD и построения схемы с использованием отражения (http://spark.apache.org/docs/latest/sql-programming-guide.html#inferring-the-schema-using-reflection). В scala я бы использовал класс case, чтобы отразить это. Одна проблема с RDD может быть связана с ее производительностью.

Вариант 2: Другой вариант может заключаться в использовании DataFrame.toDF (colNames: String *): DataFrame. В основном организуйте/выберите столбцы в нужном порядке, которые вы хотели бы, и укажите имена столбцов, используя последовательность, построенную программно.

Надеюсь, это поможет.

Смежные вопросы