在 pySpark (2.3) 中读取本地 csv 文件
read local csv file in pySpark (2.3)
我正在使用 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
存在于SparkContext
(在repl中称为sc
),而不是在SparkSession
对象(在repl中称为spark
)回复).
其次,对于 CSV 数据,我建议使用 CSV DataFrame
加载代码,如下所示:
df = spark.read.format("csv").load("file:///path/to/file.csv")
您在评论中提到需要数据作为 RDD。如果您可以将所有操作保留在 DataFrames 而不是 RDD 上,您将获得更好的性能。但是,如果您出于某种原因需要回退到 RDD,您可以按以下方式进行:
rdd = df.rdd.map(lambda row: row.asDict())
采用这种方法比尝试使用 textFile
加载它并自己解析 CSV 数据要好。如果您使用 DataFrame
CSV 加载,那么它将为您正确处理所有 CSV 边缘情况,例如引用字段。此外,如果只需要一些列,您可以在将 DataFrame
转换为 RDD
之前对其进行过滤,以避免需要将所有额外数据带入 python 解释器。
我正在使用 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
存在于SparkContext
(在repl中称为sc
),而不是在SparkSession
对象(在repl中称为spark
)回复).
其次,对于 CSV 数据,我建议使用 CSV DataFrame
加载代码,如下所示:
df = spark.read.format("csv").load("file:///path/to/file.csv")
您在评论中提到需要数据作为 RDD。如果您可以将所有操作保留在 DataFrames 而不是 RDD 上,您将获得更好的性能。但是,如果您出于某种原因需要回退到 RDD,您可以按以下方式进行:
rdd = df.rdd.map(lambda row: row.asDict())
采用这种方法比尝试使用 textFile
加载它并自己解析 CSV 数据要好。如果您使用 DataFrame
CSV 加载,那么它将为您正确处理所有 CSV 边缘情况,例如引用字段。此外,如果只需要一些列,您可以在将 DataFrame
转换为 RDD
之前对其进行过滤,以避免需要将所有额外数据带入 python 解释器。