【问题标题】:Make The 3rd row as Header of Dataframe将第三行作为数据框的标题
【发布时间】:2019-10-14 03:41:45
【问题描述】:

我在 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

【问题讨论】:

  • 你在这方面做了什么?请展示你的努力是如何不工作的......所以不是项目的代码编写服务。请添加您的代码 sn-ps 和测试数据。
  • Hi Ram,测试数据如上提供。如上所述,我试图了解如何将行作为标题但没有得到。因为我无法得到我在这里问过的想法。抱歉不清楚。
  • @KumarP 你的问题被否决了,因为它要么被认为格式不正确,要么通常对社区其他人没有帮助。我建议阅读Help Center 中的帖子,尤其是How do I ask a good question? 主题。
  • stackoverflow.com/questions/27772805/… -- 请看这个问题。它也没有格式化,答案可以从谷歌得到。仍然是赞成的。对于已经知道答案的人来说,问题可能很容易或没有用,但对提问的人很有用。所以我的善意请求不要投反对票以表明你有很高的声誉。
  • 当你说它对社区没有帮助时。这意味着提问者不被视为社区的一部分。它的格式正确,带有示例问题,但仍然被否决。我觉得这是错误的。

标签: apache-spark pyspark apache-spark-sql


【解决方案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)

希望能回答你的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多