繁体   English   中英

DISTINCT SQL 语句和来自 pyspark 的 DISTINCT 方法之间的不同 output

[英]Different output between DISTINCT SQL statement and DISTINCT method from pyspark

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

编辑

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

FILE_PATH = "my_folder/dataset.csv/"
spark = SparkSession.builder.getOrCreate()
sc = spark.sparkContext
my_rdd = spark.sparkContext.textFile(FILE_PATH)
my_rdd.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']

它显示为字符串列表。 但是使用以下代码,我将每个字符串拆分为四个元素的列表。

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_imporprove_destsim_sptosporg 第二个, prove_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())

output 为 2,292,034。

为了检查一切是否正常,我使用 DB Browser for SQLite,版本 3.11.2 再次查找不同的值,并带有这句话:

CREATE TABLE "dataset" (
    "cuit_impor"    REAL,
    "prove_dest"    TEXT,
    "sim_sptos" TEXT,
    "porg"  INTEGER
);

SELECT COUNT(DISTINCT prove_dest)
FROM dataset;

output 为 2,312,252

两种情况下读取的行数相同:11,474,580。 这意味着在这两种情况下,数据集都是相同的。 数据读取没有问题。

似乎 SQLite 将 pyspark 没有的某些字符串标识为不同的值。 有人在任何时候遇到过这个问题吗? 我该如何解决这个问题?

在 sql 查询中,您在一列(prove_dest)上执行不同的操作,但在 pyspark 中,您在 rdd 的所有列上执行不同的操作。 这就是为什么你有不同的结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM