通过Zeppelin访问HDFS数据

时间:2018-08-20 03:53:12

标签: apache-spark hadoop hdfs apache-zeppelin

我正在尝试使用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")

我在输出提示中没有收到任何错误,但是,我在右上角收到了错误消息。

这里是那声尖叫。 enter image description here

1 个答案:

答案 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")