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

加载数据帧时从文件中删除CSV列,csv,apache-spark,pyspark,databricks,Csv,Apache Spark,Pyspark,Databricks,当通过DataRicks加载csv时,第2行下面的第4列未加载。 csv的列数每行不同 在test_01.csv中 a,b,c s,d,a,d f,s 通过下面的Datatricks加载上述csv文件 >>> df2 = sqlContext.read.format("com.databricks.spark.csv").load("sample_files/test_01.csv") >>> df2.show() +---+---+----+ | C0|

当通过DataRicks加载csv时,第2行下面的第4列未加载。 csv的列数每行不同

在test_01.csv中

a,b,c
s,d,a,d
f,s
通过下面的Datatricks加载上述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|
+---+---+----+
尝试用文本文件加载 rdd=sc.textFile sample_files/test_01.csv

收集

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

可以通过如下指定架构来解决此问题。 df2=sqlContext.read.formatcom.databricks.spark.csv.schemaschema.loadsample\u files/test\u 01.csv

df2.show

尝试使用推断模式。仍然不起作用 df2=sqlContext.read.formatcom.databricks.spark.csv.optioninferSchema,true.loadsample\u files/test\u 01.csv

df2.show


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

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

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

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

你能试试吗。optioninferSchema,true,即sqlContext.read.formatcom.databricks.spark.csv。optioninferSchema,true.loadsample\u files/test\u 01.csvalready试过了。。不工作。。
+---+---+----+----+----+
| e1| e2|  e3|  e4|  e5|
+---+---+----+----+----+
|  a|  b|   c|null|null|
|  s|  d|   a|   d|null|
|  f|  s|null|null|null|
+---+---+----+----+----+
+---+---+----+
| C0| C1|  C2|
+---+---+----+
|  a|  b|   c|
|  s|  d|   a|
|  f|  s|null|
+---+---+----+
val schema = new StructType()
    .add(StructField("keyname", StringType, true))