使用Spark 2.0将csv读入RDD

使用Spark 2.0将csv读入RDD,csv,apache-spark,pyspark,spark-dataframe,Csv,Apache Spark,Pyspark,Spark Dataframe,我想使用Spark 2.0将csv文件读入RDD。我可以使用 df = session.read.csv("myCSV.csv", header=True,) 我可以将其作为文本文件加载,然后使用 import csv rdd = context.textFile("myCSV.csv") header = rdd.first().replace('"','').split(',') rdd = (rdd.mapPartitionsWithIndex(lambda idx, itr: itr.

我想使用Spark 2.0将csv文件读入RDD。我可以使用

df = session.read.csv("myCSV.csv", header=True,)
我可以将其作为文本文件加载,然后使用

import csv
rdd = context.textFile("myCSV.csv")
header = rdd.first().replace('"','').split(',')
rdd = (rdd.mapPartitionsWithIndex(lambda idx, itr: itr.drop(1) if idx == 0 else itr)
        .mapPartitions(lambda x: csv.reader(x))
      )
有没有一种方法可以使用内置的csv阅读器spark csv直接进入RDD,而不必从数据帧转换为csv?或者,也许上面的RDD方法已经足够好了,因为内置的读卡器在引擎盖下做了类似的事情


编辑:1同样,我不想读入数据帧,然后转换为RDD。这将建立一个完整的结构,但它会立即被放下。似乎毫无意义。2是的,我可以根据DF->RDD转换来计算上述时间,但这只能告诉我我的RDD读取解决方案是否优于转换。内置的csv到RDD方法很可能比上述代码更优化

您可以使用.rdd将数据帧转换为rdd,如下所示

rdd = session.read.csv("myCSV.csv", header=True).rdd

正如我在原始问题中所说,无需转换:建立一些结构然后马上放弃似乎很愚蠢。啊,我错过了。嗯,从DF转换为RDD在计算上不需要花费任何成本,但是您是对的,您可能在构建结构时浪费了一些资源。构建结构的开销应该很小,因为CSV是由第一行定义的,例如不需要扫描整个文件。他们唯一能确定的方法是做一些定时测试。我可以做定时测试,但如果有一个内置的方法存在,我相信它会比我上面的解决方案更优化。所以,时间只会告诉我上述解决方案是否比转换更有效。公平点。不幸的是,我不相信有一个内置的方法来做到这一点。我猜这是因为在这种情况下,确定模式来进行DF的开销几乎是无关紧要的。CSV具有类似数据帧的格式,而json文件更像RDD