我目前正在学习Spark的一些教程。我下载了最新版本的spark 2.0.1。以下是我最近在spark-shell中运行的代码:
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.createDataFrame
case class Person(name: String, age: Int)
val people = sc.textFile("examples/src/main/resources/people.txt").map(_.split(",")).map(p => Person(p(0),p(1).trim.toInt)).toDF()
// people.saveAsParquetFile("people.parquet")
people.write.format("parquet").save("people.parquet")
val parquetFile = sqlContext.parquetFile("people.parquet")
//Parquet files can also be registered as tables and then used in SQL statements.
parquetFile.registerTempTable("parquetFile")
val teenagers = sqlContext.sql("SELECT name FROM parquetFile WHERE age >= 13 AND age <= 19")
teenagers.map(t => "Name: " + t(0)).collect().foreach(println)
首先让我保证,在我来到这里询问之前,我已经搜索了所有问题并且没有找到正确的结果,因为我之前因为类似的原因而经历过我的问题。我的问题是:
import sqlContext.implicits._
和import spark.implicits._
以及import sqlContext.createDataFrame
之间有什么区别? 实际上我以前成功运行过该代码,但这次没有改变。我得到的错误信息太多了,让我展示一部分:
引起:错误XJ040:无法启动数据库&#363; metastore_db&#39;使用类加载器org.apache.spark.sql.hive.client.IsolatedClientLoader$$anon$1@59fa5a39,有关详细信息,请参阅下一个异常。 at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) at org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(Unknown Source) ... 144更多
我猜这个错误发生在.toDF()
,但不知道为什么;
最后一个问题是,我听说.saveAsParquetFile()
已经不再使用了。那么我应该如何使用.write.format("parquet").save("xxx.parquet")
编写一个镶木地板文件?
这些问题是我遇到的真正问题,而不是有效的解决方案。因此,如果您发现我可以在某个地方获得答案,请与我分享链接,不要在没有令人信服的理由的情况下投入我的问题。谢谢!