首页 > 解决方案 > spark RDD中是否有类似sql中的'like'函数的功能?

问题描述

我正在寻找像sql中的RDD操作。like假设我有一个具有不同 IP 的列,例如:

192.168.1.1/
192.168.1.2/
192.168.1.3/
123.123.123.123/
1.1.1.1/
2.2.2.2/

假设它们在不同类型的RDDDataFrame中,这样我们就可以直接对它们进行一些操作。在RDD中是否有类似以下 sql的操作具有相同的结果?

'SELECT count(host)  from webIP  where host like '192.168.1.%'.

我知道如何使用reduceByKey函数来计数Lines.reduceByKey(lambda x, y: x+y),我正在寻找的是类似likein sql 的函数,用于找出RDD数据中以 192.168.1.* 开头的 IP。

标签: pythonapache-spark

解决方案


使用 RDD:

rdd = sc.parallelize(['192.168.1.1',
                      '192.168.1.2',
                      '192.168.1.3',
                      '123.123.123.123',
                      '1.1.1.1 2.2.2.2'])

要计算以您开头的元素,192.168.1.您可以执行以下操作:

>>> rdd.filter(lambda x: x.startswith('192.168.1.')).count()
3

当心那filter()是一个转变,count()而是一个动作

使用数据框:

你可以直接用sql过滤:

>>> the_dataframe.filter('webIP LIKE "192.168.1.%"').count()

假设目标列是'webIP'


推荐阅读