如果你使用 sparkContext (sc.textFile),你会得到一个 RDD。您收到错误是因为header 不是dataframe 而是rdd。而show 仅适用于dataframe 或dataset。
您必须使用 sqlContext 和 not sparkContext 阅读文本文件。
你可以使用sqlContext和show(1)作为
val hospitalDataText = sqlContext.read.csv("/Users/bhaskar/Desktop/services.csv")
hospitalDataText.show(1, false)
更新以获得更多说明
sparkContext 将创建 rdd,可以在
中看到
scala> val hospitalDataText = sc.textFile("file:/test/resources/t1.csv")
hospitalDataText: org.apache.spark.rdd.RDD[String] = file:/test/resources/t1.csv MapPartitionsRDD[5] at textFile at <console>:25
如果你使用.first(),那么RDD[String]的第一个字符串被提取为
scala> val header = hospitalDataText.first()
header: String = test1,26,BigData,test1
现在在下面回答您的评论,是的您可以从刚刚创建的 header 字符串创建 dataframe
以下将把字符串放在一个column
scala> val sqlContext = spark.sqlContext
sqlContext: org.apache.spark.sql.SQLContext = org.apache.spark.sql.SQLContext@3fc736c4
scala> import sqlContext.implicits._
import sqlContext.implicits._
scala> Seq(header).toDF.show(false)
+----------------------+
|value |
+----------------------+
|test1,26,BigData,test1|
+----------------------+
如果你想把每个字符串放在不同的列中,你可以这样做
scala> val array = header.split(",")
array: Array[String] = Array(test1, 26, BigData, test1)
scala> Seq((array(0), array(1), array(2), array(3))).toDF().show(false)
+-----+---+-------+-----+
|_1 |_2 |_3 |_4 |
+-----+---+-------+-----+
|test1|26 |BigData|test1|
+-----+---+-------+-----+
您甚至可以将标题名称定义为
scala> Seq((array(0), array(1), array(2), array(3))).toDF("col1", "number", "text2", "col4").show(false)
+-----+------+-------+-----+
|col1 |number|text2 |col4 |
+-----+------+-------+-----+
|test1|26 |BigData|test1|
+-----+------+-------+-----+
更高级的方法是使用 sqlContext.createDataFrame 并定义 Schema