Eu venho do fundo do pandas e estou acostumado a ler dados de arquivos CSV em um dataframe e depois simplesmente alterar os nomes das colunas para algo útil usando o comando simples:
df.columns = new_column_name_list
No entanto, o mesmo não funciona em quadros de dados pyspark criados usando o sqlContext. A única solução que eu poderia descobrir para fazer isso facilmente é a seguinte:
df = sqlContext.read.format("com.databricks.spark.csv").options(header='false', inferschema='true', delimiter='\t').load("data.txt")
oldSchema = df.schema
for i,k in enumerate(oldSchema.fields):
k.name = new_column_name_list[i]
df = sqlContext.read.format("com.databricks.spark.csv").options(header='false', delimiter='\t').load("data.txt", schema=oldSchema)
Isso basicamente define a variável duas vezes e infere o esquema primeiro, depois renomeia os nomes das colunas e carrega o quadro de dados novamente com o esquema atualizado.
Existe uma maneira melhor e mais eficiente de fazer isso, como fazemos nos pandas?
Minha versão do Spark é 1.5.0
for
laço +withColumnRenamed
, mas a suareduce
opção é muito bom :)