1.pandas  dataframe

匹配一个很简单,批量匹配如下

df_obj[df_obj['title'].str.contains(r'.*?n.*')] #使用正则表达式进行模糊匹配,*匹配0或无限次,?匹配0或1次

pyspark dataframe 中模糊匹配有两种方式

2.spark  dataframe  api,  filter rlike 联合使用

df1=df.filter("uri rlike 
   'com.tencent.tmgp.sgame|%E8%80%85%E8%8D%A3%E8%80%80_|android.ugc.live|\
   %e7%88f%e8%a7%86%e9%a2%91|%E7%%8F%E8%A7%86%E9%A2%91'").groupBy("uri").\
   count().sort("count", ascending=False)

1.rlike 后面进行批量匹配用引号包裹即可

2.rlike 中要匹配特殊字符的话,不需要转义

3.rlike '\\\\bapple\\\\b' 虽然也可以匹配但是匹配数量不全,具体原因不明,欢迎讨论。

In [5]: df.filter("name rlike '%'").show()
+---+------+-----+
|age|height| name|
+---+------+-----+
|  4|   140|A%l%i|
|  6|   180| i%ce|
+---+------+-----+

3.spark sql

spark.sql("select uri from t where uri like '%com.tencent.tmgp.sgame%' or uri like 'douyu'").show(5)

如果要批量匹配的话,就需要在后面继续添加uri like '%blabla%',就有点繁琐了。

对了这里需要提到原生sql 的批量匹配,regexp  就很方便了,跟rlike 有点相似

mysql> select count(*) from url_parse where uri regexp 'android.ugc.live|com.tencent.tmgp.sgame';
+----------+
| count(*) |
+----------+
|     9768 |
+----------+
1 row in set (0.52 sec)

于是这里就可以将sql中regexp 应用到spark sql 中

In [9]: spark.sql('select * from t where name regexp "%l|t|_"').show()
+---+------+------+
|age|height|  name|
+---+------+------+
|  1|   150|Al_ice|
|  4|   140| A%l%i|
+---+------+------+
                    1.pandas  dataframe 匹配一个很简单,批量匹配如下df_obj[df_obj['title'].str.contains(r'.*?n.*')] #使用正则表达式进行模糊匹配,*匹配0或无限次,?匹配0或1次pyspark dataframe 中模糊匹配有两种方式2.spark  dataframe  api,  filter rlike 联合使用df1=d...
				
github主页导入:>>> from fuzzywuzzy import fuzz >>> from fuzzywuzzy import process1)>>> fuzz.ratio("this is a test", "this is a test!") out 97 >>> fuzz.partial_ratio("this is a test", "this is a test!")
sql的where语句的功能非常丰富,常用关键包括 =,<>,>=,<=,>,<,in,not in,isnull,like,and,or等关键字,下面我们就来看看,如果是在pandas该如何实现。 >>> import pandas as pd >>> import numpy as np df = pd.read_excel(r'D:/myExcel/1.xlsx') >>> df = pd.read_ex
scala> df.show(10) +--------+------------------+------+ | R1| G2|labels| +------...
【Coding】Pandas实现VLOOKUP模糊搜索匹配 1. 问题描述 如果想利用pandas在python实现Series文本模糊匹配而非精准匹配,可以利用fuzzy实现。 2. 数据样例 df1 = pd.DataFrame([['Apple','A'],['Banana','B'],['Orange','C'],['Strawberry','D'],['Mango','G']], columns=['Fruits','AA']) df2 = pd.DataFrame([['Aple','a'
DataFrame是PythonPandas的一种数据结构,它类似excel,是一种二维表。 或许说它可能有点像matlab的矩阵,但是matlab的矩阵只能放数值型值(当然matlab也可以用cell存放多类型数据),DataFrame的单元格可以存放数值、字符串等,这和excel表很像。 同时DataFrame可以设置列名columns与行名index,可以通过像matlab一样通过...
pandas的功能非常强大,支持类似与sql的数据增、删、查、改,并且带有丰富的数据处理函数; 支持时间序列分析功能;支持灵活处理缺失数据等。 pandas的基本数据结构是Series和DataFrame。 Series是序列,类似一维数组; DataFrame相当于一张二维表格,类似二维数组,它的每一列都是一个Series。 为了定位Series的元素,Pandas提供了Index...
DataFrame是一种不可变的分布式数据集。Spark早期的API,由于JVM和Py4J之间的通信开销,使用Python执行查询会明显变慢。 Python到RDD之间的通信 在PySpark驱动器Spark Context通过Py4J启动一个JavaSparkContext的JVM,所有的RDD转换最初都映射到Java的PythonRDD对象。这样,Python和JVM之间就存在很多上下...
1. data:数据,可以是numpy数组、列表、字典、Series、另一个DataFrame等。 2. index:行标签,可以是列表、数组、Series或者是由它们组成的列表。 3. columns:列标签,可以是列表、数组、Series或者是由它们组成的列表。 4. dtype:数据类型,可以是numpy数据类型或者Python数据类型。 5. copy:是否复制数据,默认为False。 6. na_values:将指定的值视为缺失值。 7. keep_default_na:是否保留默认的缺失值列表。 8. na_filter:是否过滤缺失值,默认为True。 9. verbose:是否显示详细信息,默认为False。 10. parse_dates:是否将日期解析为datetime类型,默认为False。 11. infer_datetime_format:是否自动推断日期格式,默认为False。 12. dayfirst:是否将日期的日放在前面,默认为False。 13. compression:压缩格式,可以是gzip、bz2、zip、xz等。 14. engine:读取文件的引擎,可以是c、python等。 15. nrows:读取的行数。 16. skiprows:跳过的行数。 17. skipfooter:跳过的尾部行数。 18. header:指定列名所在的行数,默认为。 19. index_col:指定索引列的列名或列号。 20. usecols:需要读取的列名或列号。 21. delimiter:分隔符,默认为逗号。 22. sep:分隔符,与delimiter参数作用相同。 23. decimal:小数点分隔符。 24. thousands:千位分隔符。 25. encoding:文件编码。 26. squeeze:是否将单列DataFrame转换为Series,默认为False。 27. memory_map:是否使用内存映射文件读取数据,默认为False。 28. float_precision:浮点数精度。