我正在尝试使用Spark解释器通过Zeppelin访问HDFS数据。
这是我的代码:
val bankText = sc.parallelize(hdfs://hadoop:8020/user/zeppelin/bank.csv)
case class Bank(age: Integer, job: String, marital: String, education: String, balance: Integer)
val bank = bankText.map(s => s.split(";")).filter(s => s(0) != "\"age\"").map(
s => Bank(s(0).toInt,
s(1).replaceAll("\"", ""),
s(2).replaceAll("\"", ""),
s(3).replaceAll("\"", ""),
s(5).replaceAll("\"", "").toInt
)
).toDF()
bank.registerTempTable("bank")
我在输出提示中没有收到任何错误,但是,我在右上角收到了错误消息。
答案 0 :(得分:0)
您的主要问题是以下陈述:
val bankText = sc.parallelize(hdfs://hadoop:8020/user/zeppelin/bank.csv)
我认为您的意思是:
val bankText = sc.parallelize("hdfs://hadoop:8020/user/zeppelin/bank.csv")
但是,尽管它可以编译,但无法满足您的期望。 parallelize()
用于将Scala Seq
(在这种情况下为String
)转换为RDD,其每一行都是Seq
的成员。换句话说,您将拥有一个RDD,其中每一行都是来自字符串"hdfs://hadoop:8020/user/zeppelin/bank.csv"
的字符。第一行将是“ h”,第二行将是“ d”,依此类推。
长话短说,要从HDFS中以字符分隔的文件中读取,所需的命令是
val bankText = spark.read.option("sep", ";").csv("hdfs://hadoop:8020/user/zeppelin/bank.csv")