我在csv中有一个数据,如下所示,第一行为空白,第二行仅填充了下面的4列,
201901 201902 201903 201904
A X 1 0 1 1
B Y 0 0 1 1
A Z 1 0 1 1
B X 1 0 1 1
A Y 0 0 0 1
B Z 1 0 0 1
A X 0 1 0 1
B Y 1 1 0 0
A Z 1 1 0 0
B X 0 1 1 0
如果我将数据读入csv,我将得到如下数据
_c1 _c2 _c3 _c4 _c5 _c6
null null null null null null
null null 201901 201902 201903 201904
A X 1 0 1 1
B Y 0 0 1 1
A Z 1 0 1 1
B X 1 0 1 1
A Y 0 0 0 1
B Z 1 0 0 1
A X 0 1 0 1
B Y 1 1 0 0
A Z 1 1 0 0
B X 0 1 1 0
我已经读取了没有标题的数据文件,并删除了不需要的标题。现在我想将文件转换为具有标题
df=spark.read.csv("s3://abc/def/file.csv",header=False)
df=df.where(col("_c3").isNotNull())
Type Source 201901 201902 201903 201904
A X 1 0 1 1
B Y 0 0 1 1
A Z 1 0 1 1
B X 1 0 1 1
A Y 0 0 0 1
B Z 1 0 0 1
A X 0 1 0 1
B Y 1 1 0 0
A Z 1 1 0 0
B X 0 1 1 0
答案 0 :(得分:-1)
您可以通过定义类似这样的自定义模式
val customSchema = StructType(Array(
StructField("yourcolumnheader", StringType, true),
StructField("yourcolumnheader2", StringType, true),
StructField("yourcolumnheader3", IntegerType, true),
StructField("yourcolumnheader4", DoubleType, true)))
然后在读取格式化的文件时使用该架构,即删除了3行CSV文件
df=spark.read.csv("s3://abc/def/file.csv",header=False)
.schema(customeSchema)
希望能回答您的问题。