Spark df.select为带有标题的csv返回不正确的列

时间:2019-01-15 01:00:38

标签: scala csv apache-spark apache-spark-sql columnheader

我正在实现Spark Data Source API v1的buildScan方法。

override def buildScan(requiredColumns: Array[String], filters: Array[Filter]): RDD[Row] =

我正在尝试读取带有标题的.csv文件。

val df = sqlContext.sparkSession.read
     .schema(_schema_)
     .option("header", "true")
     .csv(_array_pf_paths_)

并将其作为rdd返回

df.rdd

架构如下:

root
|-- A: string (nullable = true)
|-- B: string (nullable = true)
|-- C: string (nullable = true)
|-- D: string (nullable = true)
|-- E: string (nullable = true)
|-- F: string (nullable = true)

标题出现在标题位置以及第一行

df.show()

-----------------------
A   B   C   D   E   F
-----------------------
A   B   C   D   E   F
a1  b1  c1  d1  e1  f1 
a2  b2  c2  d2  e2  f2 
a3  b3  c3  d3  e3  f3 
a4  b4  c4  d4  e4  f4 
a5  b5  c5  d5  e5  f5 
------------------------

像我一样返回rdd

df.select(F) or df.select(E) 

总是返回第一列。

---
A   
---
A   
a1
a2
a3
a4
a5
---

,但是buildScan()内部的df.show返回正确的列。

我找不到确切的列映射出问题的地方。

1 个答案:

答案 0 :(得分:0)

您必须在列名中使用双引号 像df.select(“ D”)。show()