Python pyspark中不同SQL语句和不同方法之间的不同输出

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

我在一个+11M行的数据集中做了一些清理,其中包含了大量噪音的企业名称。我想做一些正则表达式清理(删除标点、空格、数字、重音和其他一些问题),然后应用一些近似的字符串匹配算法,如TF-IDF或BM25,但这是另一个问题

编辑

这是我的前五行(包括标题)

它以字符串列表的形式显示。但在下面的代码中,我将每个字符串拆分为一个包含四个元素的列表

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;