我正在使用 MongoDB Spark 連接器從 MongoDB 匯入資料,然后執行一些 SQL 查詢。我將在進入實際問題之前描述整個程序,以防萬一我做錯了什么,因為這是我第一次使用這些工具。
我使用特定的 Collection 初始化 spark-shell,包括連接器包:
spark-shell --conf "spark.mongodb.input.uri=mongodb://127.0.0.1/myDb.myBigCollection"
--packages org.mongodb.spark:mongo-spark-connector_2.12:3.0.1
我啟用連接器:
import com.mongodb.spark._
我制作了我想要的集合的 RDD:
val rdd = MongoSpark.load(sc)
我用它制作了一個資料框,這樣我就可以在它上面使用 SQL:
val df = rdd.toDF()
我創建了資料集的臨時視圖:
df.createOrReplaceTempView("sales")
資料庫有 100 萬個這種格式的條目:
_id: 61a6540c3838fe02b81e5339
Region: "Sub-Saharan Africa"
Country: "Ghana"
Item Type: "Office Supplies"
Sales Channel: "Online"
Order Priority: "L"
Order Date: 2017-03-22T22:00:00.000 00:00
Order ID: 601245963
Ship Date: 2017-04-14T21:00:00.000 00:00
Units Sold: 896
Unit Price: 651.21
Unit Cost: 524.96
Total Revenue: 583484.16
Total Cost: 470364.16
Total Profit: 113120
資料型別是字串/日期/數字/雙精度。
像這樣的簡單查詢作業正常:
spark.sql("SELECT * FROM sales").show()
字串查詢也可以正常作業:
spark.sql("SELECT Country FROM sales WHERE Region = 'Sub-Saharan Africa'").show()
但是當我查詢數值時,我得到一個空表:
spark.sql("SELECT * FROM sales WHERE 'Units Sold' > 4000").show()
我試過將查詢分配給一個 val 然后在它上面使用 show() 但它是一樣的。
uj5u.com熱心網友回復:
如果它不是您的 SELECT 中的拼寫錯誤/cut-n-paste 錯誤,則其中的 WHERE 子句將字串“Units Sold”與數值 4000 進行比較,該數值永遠不會為真。在 SparkSQL 中轉義列名的正確方法是使用 `(反引號)而不是'(撇號)。
所以使用以下查詢
spark.sql('SELECT * FROM sales WHERE `Unit Sold` > 1').show()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/383921.html
標籤:斯卡拉 阿帕奇火花 apache-spark-sql 火花壳
