Apache spark 读取pySpark(2.3)中的本地csv文件
我正在使用pySpark 2.3,试图读取如下所示的csv文件:Apache spark 读取pySpark(2.3)中的本地csv文件,apache-spark,pyspark,apache-spark-sql,apache-spark-mllib,pyspark-sql,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>
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)
知道我应该如何在pySpark 2.3中阅读它吗?首先,
textFile
存在于SparkContext
(在repl中称为sc
)上,而不是SparkSession
对象上(在repl中称为spark
)
其次,对于CSV数据,我建议使用CSVDataFrame
加载代码,如下所示:
df = spark.read.format("csv").load("file:///path/to/file.csv")
您在注释中提到需要将数据作为RDD。如果您可以将所有操作保留在数据帧上而不是RDD上,那么您的性能将显著提高。但是,如果出于某种原因需要退回到RDD,您可以按照以下方式进行:
rdd = df.rdd.map(lambda row: row.asDict())
使用这种方法比使用
textFile
加载它并自己解析CSV数据要好。如果您使用DataFrame
CSV加载,则它将正确处理所有CSV边缘情况,如引用字段。此外,如果只需要一些列,您可以在将其转换为RDD
之前对DataFrame
进行过滤,以避免需要将所有额外的数据带到python解释器中。但这将生成DataFrame,对吗?我需要RDD为什么你特别需要RDD?如果使用python,数据帧将提供更好的性能。如果您真的想转换为RDD,我将更新这个示例。请尝试DataFrame.RDD
rdd = df.rdd.map(lambda row: row.asDict())