错误:值show不是String的成员

时间:2017-08-19 14:36:12

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

如果在这种情况下我想show header。为什么我不能写第三行header.show()? 我需要做些什么来查看标头变量的内容?

val hospitalDataText = sc.textFile("/Users/bhaskar/Desktop/services.csv")
val header = hospitalDataText.first() //Remove the header

2 个答案:

答案 0 :(得分:1)

如果您想DataFrame使用DataFrameReaderlimit

spark.read.text(path).limit(1).show

否则只是println

println(header)

除非你想使用cats Show。使用猫将包添加到spark.jars.packages

import cats.syntax.show._
import cats.instances.string._

sc.textFile(path).first.show

答案 1 :(得分:0)

如果您使用sparkContext(sc.textFile),则会获得RDD 。您收到错误是因为header不是dataframe而是rddshow仅适用于dataframedataset

您必须使用sqlContext sparkContext阅读文本文件。

您可以使用sqlContextshow(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

现在回答您的评论,您可以从刚创建的dataframe字符串创建header

以下将把字符串放在一个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.createDataFrameSchema定义

一起使用