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

奥库布

我正在使用 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 中阅读它吗?

瑞安·威德迈尔

首先,textFile存在于SparkContextsc在repl中调用),而不是在SparkSession对象上(spark在repl中调用)。

其次,对于 CSV 数据,我建议使用 CSVDataFrame加载代码,如下所示:

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

您在评论中提到需要将数据作为 RDD。如果您可以将所有操作保留在 DataFrames 而不是 RDDs 上,您将获得显着更好的性能。但是,如果您出于某种原因需要回退到 RDD,您可以这样做:

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章