在pySpark(2.3)中读取本地csv文件

时间:2018-07-11 14:58:03

标签: apache-spark pyspark apache-spark-sql apache-spark-mllib pyspark-sql

我正在使用pySpark 2.3,试图读取如下所示的csv文件:

0,0.000476517230863068,0.0008178378961061477
1,0.0008506156837329876,0.0008467260987257776

但这不起作用:

from pyspark import sql, SparkConf, SparkContext
print (sc.applicationId)
>> <property at 0x7f47583a5548>
data_rdd = spark.textFile(name=tsv_data_path).filter(x.split(",")[0] != 1)

我得到一个错误:

AttributeError: 'SparkSession' object has no attribute 'textFile'

有什么想法应该在pySpark 2.3中阅读吗?

1 个答案:

答案 0 :(得分:-1)

首先,textFile存在于SparkContext(在repl中称为sc)上,而不是在SparkSession对象(在repl中称为spark)上

第二,对于CSV数据,我建议使用CSV DataFrame加载代码,如下所示:

df = spark.read.format("csv").load("file:///path/to/file.csv")

您在注释中提到需要将数据作为RDD。如果您可以将所有操作都保留在DataFrame而不是RDD上,那么您的性能将大大提高。但是,如果由于某种原因需要退回RDD,则可以执行以下操作:

rdd = df.rdd.map(lambda row: row.asDict())

执行此方法要比尝试使用textFile加载并自己解析CSV数据要好。如果您使用DataFrame CSV加载,那么它将为您喜欢的引用字段正确处理所有CSV边缘情况。另外,如果只需要某些列,则可以在将DataFrame转换为RDD之前对其进行过滤,以避免将所有额外的数据带入python解释器中。