Python pyspark中不同SQL语句和不同方法之间的不同输出
我在一个+11M行的数据集中做了一些清理,其中包含了大量噪音的企业名称。我想做一些正则表达式清理(删除标点、空格、数字、重音和其他一些问题),然后应用一些近似的字符串匹配算法,如TF-IDF或BM25,但这是另一个问题 编辑 这是我的前五行(包括标题) 它以字符串列表的形式显示。但在下面的代码中,我将每个字符串拆分为一个包含四个元素的列表Python pyspark中不同SQL语句和不同方法之间的不同输出,python,sql,sqlite,pyspark,db-browser-sqlite,Python,Sql,Sqlite,Pyspark,Db Browser Sqlite,我在一个+11M行的数据集中做了一些清理,其中包含了大量噪音的企业名称。我想做一些正则表达式清理(删除标点、空格、数字、重音和其他一些问题),然后应用一些近似的字符串匹配算法,如TF-IDF或BM25,但这是另一个问题 编辑 这是我的前五行(包括标题) 它以字符串列表的形式显示。但在下面的代码中,我将每个字符串拆分为一个包含四个元素的列表 my_rdd_splitted = my_rdd.map(lambda x: x.split(',')).cache() my_rdd_splitted.ta
my_rdd_splitted = my_rdd.map(lambda x: x.split(',')).cache()
my_rdd_splitted.take(5)
[['cuit_impor', 'prove_dest', 'sim_sptos', 'porg'],
['34557619099',
'PUMA SPORTS LA SA ',
'61099000111N',
'337'],
['34557619099',
'PUMA SPORTS LA SA ',
'61102000110R',
'306'],
['34557619099',
'PUMA SPORTS LA SA ',
'61102000110R',
'310'],
['34557619099',
'PUMA SPORTS LA SA ',
'61103000912D',
'337']]
正如您所看到的,我的专栏是cuit\u import
,prove\u dest
,sim\u sptos
,porg
。第二个名为prove\u dest,是有名称的。为了达到清理数据集的目标,我首先获得了所有不同的“脏”名称,因此我使用pyspark
读取数据集并运行:
#in the map method I split the string and select the element in position 1, and
#then apply distinct.
unique_names = my_rdd.map(lambda x: x.split(",")[1]).disinct().cache()
print(unique_names.count())
产量为2292034
为了检查是否一切正常,我再次使用SQLite的DB Browser 3.11.2版查找不同的值,其中有这样一句话:
CREATE TABLE "dataset" (
"cuit_impor" REAL,
"prove_dest" TEXT,
"sim_sptos" TEXT,
"porg" INTEGER
);
SELECT COUNT(DISTINCT prove_dest)
FROM dataset;
产量为2312252
两种情况下读取的行数相同:11474580。这意味着在这两种情况下,数据集是相同的。数据读取没有问题
SQLite似乎将其标识为不同的值pyspark不支持的某些字符串。有人在任何时候都有过这个问题吗?如何解决这个问题?在sql查询中,您在一列上执行distinct(证明目的),但在PySPACK中,您在rdd的所有列上执行distinct。这就是为什么会有不同的结果
检查字符串是否有前导空格或尾随空格请查看编辑内容???我认为使用我的_rdd.map(lambda x:x.split(“,”[1]).distinct(),我首先选择位置1的元素(即
prove_dest
),然后仅对这些值执行distinct。我建议您加入得到的不同结果,并尝试了解每边缺少哪些值。此外,使用csv验证程序验证您的csv文件。可能您的文件已损坏@Nachengue
CREATE TABLE "dataset" (
"cuit_impor" REAL,
"prove_dest" TEXT,
"sim_sptos" TEXT,
"porg" INTEGER
);
SELECT COUNT(DISTINCT prove_dest)
FROM dataset;