使用 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的记录