使用 spark 读取 csv.file 时如何省略标头?

Posted

技术标签:

【中文标题】使用 spark 读取 csv.file 时如何省略标头?【英文标题】:How to omit the header in when use spark to read csv.file? 【发布时间】:2017-05-07 23:02:01 【问题描述】:

我正在尝试使用 Spark 在 jupyter notebook 中读取 csv 文件。到目前为止我有

spark = SparkSession.builder.master("local[4]").getOrCreate()
reviews_df = spark.read.option("header","true").csv("small.csv")
reviews_df.collect()

这是reviews_df 的样子:

[Row(reviewerID=u'A1YKOIHKQHB58W', asin=u'B0001VL0K2', overall=u'5'),
 Row(reviewerID=u'A2YB0B3QOHEFR', asin=u'B000JJSRNY', overall=u'5'),
 Row(reviewerID=u'AAI0092FR8V1W', asin=u'B0060MYKYY', overall=u'5'),
 Row(reviewerID=u'A2TAPSNKK9AFSQ', asin=u'6303187218', overall=u'5'),
 Row(reviewerID=u'A316JR2TQLQT5F', asin=u'6305364206', overall=u'5')...]

但是数据框的每一行都包含列名,我该如何重新格式化数据,让它变成:

 [(u'A1YKOIHKQHB58W', u'B0001VL0K2', u'5'), 
  (u'A2YB0B3QOHEFR', u'B000JJSRNY', u'5')....]

【问题讨论】:

【参考方案1】:

Dataframe 总是返回 Row 对象,这就是为什么当你在 dataframe 上发出 collect() 时,它会显示 -

Row(reviewerID=u'A1YKOIHKQHB58W', asin=u'B0001VL0K2', overall=u'5')

为了得到你想要的,你可以做到——

reviews_df.rdd.map(lambda row : (row.reviewerID,row.asin,row.overall)).collect()

这将返回您tuple of values of rows

【讨论】:

以上是关于使用 spark 读取 csv.file 时如何省略标头?的主要内容,如果未能解决你的问题,请参考以下文章

pyspark读取csv文件multiLine选项不适用于具有换行符spark2.3和spark2.2的记录

如何在 pyspark 数据框中读取 csv 文件时读取选定的列?

使用 glob 读取多个 CSV 导致顺序错误 [重复]

CSV 文件读取类

文件无法读取:UnicodeDecodeError

使用 spark 读取 xml 时如何识别或重新路由错误的 xml