1

我正在尝试更改一个非常大的 csv 文件的标题。

我使用 SparkSQL

所有标题some_string在每个标题名称中都有,例如some_string.header_name

我的 Spark 配置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 列

非常适合任何想法如何快速有效地更改标题

4

1 回答 1

1

我对 Python 的了解不够,无法为您提供示例代码片段。希望这可能会给您一些有关 Python 的提示... 选项 1:我可能建议使用 RDD 并使用反射构建架构(http://spark.apache.org/docs/latest/sql-programming-guide. html#inferring-the-schema-using-reflection)。在 scala 中,我会使用一个案例类来反映这一点。RDD 的一个问题可能与它的性能有关。

选项 2:另一个选项可能是使用 DataFrame.toDF(colNames: String*): DataFrame。基本上以您想要的正确顺序排列/选择列,并使用以编程方式构建的序列提供列名称。

希望这可以帮助。

于 2016-01-12T18:12:57.563 回答