Haf*_*did 67 csv scala apache-spark
假设我给三个文件路径指向要读取的Spark上下文,并且每个文件在第一行中都有一个模式.我们如何从头文件中跳过架构线?
val rdd=sc.textFile("file1,file2,file3")
Run Code Online (Sandbox Code Playgroud)
现在,我们如何跳过此rdd的标题行?
Jim*_*mmy 89
data = sc.textFile('path_to_data')
header = data.first() #extract header
data = data.filter(row => row != header) #filter out header
Run Code Online (Sandbox Code Playgroud)
Sea*_*wen 62
如果第一条记录中只有一个标题行,那么过滤它的最有效方法是:
rdd.mapPartitionsWithIndex {
(idx, iter) => if (idx == 0) iter.drop(1) else iter
}
Run Code Online (Sandbox Code Playgroud)
如果当然有许多文件中包含许多标题行,这没有用.事实上,你可以通过这种方式结合三个RDD.
你也可以写一个filter只匹配一个可能是标题的行.这很简单,但效率较低.
Python等价物:
from itertools import islice
rdd.mapPartitionsWithIndex(
lambda idx, it: islice(it, 1, None) if idx == 0 else it
)
Run Code Online (Sandbox Code Playgroud)
San*_*hit 56
在Spark 2.0中,CSV阅读器内置于Spark中,因此您可以轻松加载CSV文件,如下所示:
spark.read.option("header","true").csv("filePath")
Run Code Online (Sandbox Code Playgroud)
Shi*_*nsh 13
从Spark 2.0开始,您可以使用SparkSession将其作为一个内容完成:
val spark = SparkSession.builder.config(conf).getOrCreate()
Run Code Online (Sandbox Code Playgroud)
然后作为@SandeepPurohit说:
val dataFrame = spark.read.format("CSV").option("header","true").load(csvfilePath)
Run Code Online (Sandbox Code Playgroud)
我希望它能解决你的问题!
PS:SparkSession是Spark 2.0中引入的新入口点,可以在spark_sql包下找到
在PySpark中,您可以使用数据框并将标头设置为True:
df = spark.read.csv(dataPath, header=True)
Run Code Online (Sandbox Code Playgroud)
2018 年工作 (Spark 2.3)
Python
df = spark.read
.option("header", "true")
.format("csv")
.schema(myManualSchema)
.load("mycsv.csv")
Run Code Online (Sandbox Code Playgroud)
斯卡拉
val myDf = spark.read
.option("header", "true")
.format("csv")
.schema(myManualSchema)
.load("mycsv.csv")
Run Code Online (Sandbox Code Playgroud)
PD1: myManualSchema 是我写的预定义架构,你可以跳过那部分代码
更新 2021 相同的代码适用于 Spark 3.x
df = spark.read
.option("header", "true")
.option("inferSchema", "true")
.format("csv")
.csv("mycsv.csv")
Run Code Online (Sandbox Code Playgroud)
您可以单独加载每个文件,过滤它们file.zipWithIndex().filter(_._2 > 0)然后联合所有文件RDD.
如果文件数太大,联盟可能会抛出一个StackOverflowExeption.
| 归档时间: |
|
| 查看次数: |
97915 次 |
| 最近记录: |