2017-05-22 83 views
0

我在cassandra數據庫中有這個表,其中一列保存着IP地址列表{['[10.100.164.33]','[10.100.164.36]','[10.100.164.37 ]'}。 現在我想查詢通過火花SQL像選擇其中一個IP爲10.100.164.36的行。如何在spark sql中查詢。在火花中選擇數組類型

表有3個字段CURRENT_TIME,destinationips和SOURCE_IP

輸出應該是

1495448344501 | {'[10.100.1.25]', '[10.100.164.36]'} | 192.168.11.1 

任何人都可以請幫助

+0

有什麼喲你試過了嗎?您的預期輸出也與您分享的數據不一致。 – mtoto

+0

您只對'destinationips'感興趣嗎? –

回答

0

您創建一個數據幀後,讀一卡桑德拉DB和獲取列表在destinationip字段中,您可以像這樣查詢

val spark = 
    SparkSession.builder().master("local").appName("test").getOrCreate() 

    import spark.implicits._ 

    val data = spark.sparkContext.parallelize(Seq(
    (123, Array("10.100.1.25", "10.100.164.36"), "10.100.164.32"), 
    (456, Array("10.100.1.25", "10.100.164.3"), "10.100.164.32"), 
    (45, Array("10.100.1.25", "10.100.164.36"), "10.100.164.32"), 
    (46, Array("10.100.1.25", "10.100.164.367"), "10.100.164.32") 
)).toDF("current_time","destinationips", "source_ip") 


    data.select("*").where(array_contains(data("destinationips"), "10.100.164.36")).show 
+0

我試過這個查詢 但它給錯誤未定義函數:'data'。這個函數既不是註冊的臨時函數也不是在數據庫'default'中註冊的永久函數。第1行pos 60「 –

+0

數據是一個數據框在你的情況下使數據變量與數據框名稱一致。 –