簡體   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