【问题标题】:CSV Columns removed From file while loading Dataframe加载数据框时从文件中删除 CSV 列
【发布时间】:2019-06-24 15:05:48
【问题描述】:

通过数据块加载 csv 时,未加载第 2 行下方的第 4 列。 csv 的列数因行而异。

在 test_01.csv 中,

a,b,c
s,d,a,d
f,s

通过如下数据块加载到 csv 文件上方

>>> df2 = sqlContext.read.format("com.databricks.spark.csv").load("sample_files/test_01.csv")
>>> df2.show()
+---+---+----+
| C0| C1|  C2|
+---+---+----+
|  a|  b|   c|
|  s|  d|   a|
|  f|  s|null|
+---+---+----+
  1. 尝试使用文本文件加载

rdd = sc.textFile("sample_files/test_01.csv")

rdd.collect()

[u'a,b,c', u's,d,a,d', u'f,s']

但不将上述 rdd 转换为数据帧会导致错误

  1. 能够通过指定如下架构来解决。

df2 = sqlContext.read.format("com.databricks.spark.csv").schema(schema).load("sample_files/test_01.csv")

df2.show()

+---+---+----+----+----+
| e1| e2|  e3|  e4|  e5|
+---+---+----+----+----+
|  a|  b|   c|null|null|
|  s|  d|   a|   d|null|
|  f|  s|null|null|null|
+---+---+----+----+----+
  1. 已尝试使用 inferschema。还是不行

df2 = sqlContext.read.format("com.databricks.spark.csv").option("inferSchema", "true").load("sample_files/test_01.csv")

df2.show()

+---+---+----+
| C0| C1|  C2|
+---+---+----+
|  a|  b|   c|
|  s|  d|   a|
|  f|  s|null|
+---+---+----+

但是由于列数不同,有没有其他不使用模式的方法?

【问题讨论】:

  • 你可以试试.option("inferSchema", "true")sqlContext.read.format("com.databricks.spark.csv").option("inferSchema", "true").load("sample_files/test_01.csv")
  • 已经试过了..不行..

标签: csv apache-spark pyspark databricks


【解决方案1】:

确保您有固定的标题,即行可以有数据丢失,但列名应该是固定的。

如果您不指定列名,您仍然可以在读取 csv 时创建架构:

val schema = new StructType()
    .add(StructField("keyname", StringType, true))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-01
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 2013-01-23
    • 2017-06-03
    • 1970-01-01
    相关资源
    最近更新 更多