apache-spark - 将第三行作为数据框的标题
问题描述
我在 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
解决方案
您可以通过像这样定义它来创建自定义架构
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)
希望这能回答你的问题。
推荐阅读
- javascript - 使用 removeChild() [Vanilla Javascript] 从父 DOM 中删除特定索引子项
- php - 变量和引号 - 传递给函数时的区别
- javascript - 如何防止组件随着不断增长的视图向上移动
- c# - 使用 PutObjectRequest 写入 S3,同时仍生成流
- javascript - 使用 Web Audio Api AudioWorklet 从音频流中抓取比特并进行 BPM 检测
- xamarin - Xamarin Forms:转换器的多个项目
- javascript - 仅在来自特定页面时创建该链接
- sql - 使用两个标准查找查询中的差异
- c# - ASP NET Web API google 身份验证问题 HTTP 404
- r - R Markdown 在代码块中使用“Eval”崩溃