加载数据框时从文件中删除了CSV列

时间:2019-01-31 07:56:06

标签: csv apache-spark pyspark databricks

通过databricks加载csv时,第二行第4列下方未加载。 CSV的列数随行而变化。

在test_01.csv中,

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

通过databricks如下在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. 尝试过推理。仍然无法正常工作
  
    
      

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|
+---+---+----+

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

1 个答案:

答案 0 :(得分:1)

确保您具有固定的标题,即行可能缺少数据,但列名应该固定。

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

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