如果在这种情况下我想show
header
。为什么我不能写第三行header.show()
?
我需要做些什么来查看标头变量的内容?
val hospitalDataText = sc.textFile("/Users/bhaskar/Desktop/services.csv")
val header = hospitalDataText.first() //Remove the header
答案 0 :(得分:1)
如果您想DataFrame
使用DataFrameReader
和limit
:
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
而是rdd
。 show
仅适用于dataframe
或dataset
。
您必须使用sqlContext
和不 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
现在回答您的评论,是您可以从刚创建的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.createDataFrame
与Schema
定义