object Test {
def main(array: Array[String]): Unit = {
val conf = new SparkConf().setAppName("測驗測驗")
//.setMaster("spark://192.168.2.232:7077")
// .setJars(Array[String]("file://D:/ideaWorkspace/GDBigDAtaSpark_2/out/artifacts/GDBigDAtaSpark_2_jar/GDBigDAtaSpark_1.jar"))
val sc = new SparkContext(conf)
val sparkSQL = new SQLContext(sc)
val schema = StructType(
StructField("id", StringType, false) ::
StructField("name", StringType, false) :: Nil
)
val rdd = sc.textFile("hdfs://192.168.2.232:8020/user/hive/warehouse/t_test").map(x => x.split("\u0001")).map(r => Row(r(0), r(1)))
sparkSQL.createDataFrame(rdd, schema).registerTempTable("t_test")
val df = sparkSQL.sql("select * from t_test")
//val df = sparkSQL.value.sql("select * from t_test")
df.foreach(row => {
println(s"主鍵=${row(0).toString}")
import sparkSQL.implicits._
sparkSQL.sql(s"select * from t_test where id=${row(0).toString}")
})
}
}
各位spark大神幫看看, 我在DataFrame遍歷時想讀取另一個表的資料,但SQLContext會報空指標,請問這該如何解決。
sparkSQL.sql(s"select * from t_test where id=${row(0).toString}")
這一行 會報空指例外。
uj5u.com熱心網友回復:
有大神指點一下嗎,還是我編程方式和思維不對。uj5u.com熱心網友回復:
ssssssuj5u.com熱心網友回復:
不能在算子里參考SparkContext(包括SQLContext)。換個思路,你這需求可以簡單的用SQL join來實作uj5u.com熱心網友回復:
RDD里不能參考RDD,如果另一個表不大,用廣播變數,否則用join來實作轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/58913.html
標籤:Spark
