自定义分隔符CSV阅读器Spark

54
我希望使用Apache Spark读取以下结构的文件。
628344092\t20070220\t200702\t2007\t2007.1370

分隔符是 \t。我该如何在使用 spark.read.csv() 时实现它?

这个csv文件太大了,用pandas读取需要很长时间。是否有类似于...的方法可行?

pandas.read_csv(file, sep = '\t')

非常感谢!
3个回答

99
使用 spark.read.option("delimiter", "\t").csv(file)sep 代替 delimiter
如果字面上是 \t,而不是制表符特殊字符,请使用双反斜杠 \\spark.read.option("delimiter", "\\t").csv(file)

2
有没有任何网站可以查看spark.read或其他内容的文档?感谢您的回答! :) - inneb
2
CSV支持是这个项目的合并:https://github.com/databricks/spark-csv 它有一些文档。我个人只是检查代码 :) - T. Gawęda
sep 和 delimiter 有什么区别? - aglavina
1
@aglavina 没有区别,两者意思相同 :) - T. Gawęda
Spark现在已经改变了,顶部的pandas解决方案也是可能的吗? - Jan Janiszewski

6

这对我很有效,而且更加清晰易懂(至少对我来说是这样的): 就像你所提到的,在pandas中可以这样做:

df_pandas = pandas.read_csv(file_path, sep = '\t')

在Spark中:

df_spark = spark.read.csv(file_path, sep ='\t', header = True)

请注意,如果你的CSV文件的第一行是列名,你应该将header = False进行设置,如下所示:
df_spark = spark.read.csv(file_path, sep ='\t', header = False)

您可以更改分隔符(sep)以适应您的数据。

0
如果您正在使用 SparkSQL,您可以使用以下 DDL 与 OPTION 语法来指定您的 delimiter
CREATE TABLE sample_table
USING CSV
OPTIONS ('delimiter'='\t')
AS SELECT ...

SparkSQL文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接