2017-05-22 49 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

数据是一个数据框在你的情况下使数据变量与数据框名称一致。 –