我正在使用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中阅读吗?
答案 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解释器中。