通过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|
+---+---+----+
rdd = sc.textFile(“ sample_files / test_01.csv”)
rdd.collect()
[u'a,b,c', u's,d,a,d', u'f,s']
但不能将上述rdd转换为数据帧会导致错误
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|
+---+---+----+----+----+
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|
+---+---+----+
但是,由于列号的不同,还有没有使用模式的其他方法吗?
答案 0 :(得分:1)
确保您具有固定的标题,即行可能缺少数据,但列名应该固定。
如果您未指定列名,则仍可以在读取csv时创建架构:
val schema = new StructType()
.add(StructField("keyname", StringType, true))