Я пытаюсь создать список пар родитель / комментарий из общедоступного набора данных Reddit.
У меня есть CSV-файл, который я загружаю в кадр данных Pandas, который содержит строки комментариев с идентификатором родителя и ребенка, а также дочерний комментарий. Данные загружаются с использованием следующего блока кода:
import os
import multiprocessing as mp
import numpy as np
import pandas as pd
sourcePATH = r'C:\'
workingFILE = r'\output-pt1.csv'
# filepaths
input_file = sourcePATH + workingFILE
data_df = pd.read_csv(input_file,header=None,names=['PostIDX','ParentIDX','Comment','Score','Controversiality'])
Цель состоит в том, чтобы просмотреть каждую строку в кадре данных и использовать родительский идентификатор для поиска по оставшейся части кадра данных, чтобы увидеть, присутствует ли их родительский комментарий. Если это так, я сохраняю комментарии детей и родителей в кортеже с некоторой другой информацией. Затем он будет добавлен в список, который в конце будет записан в CSV-файл. Для этого я использую следующий код:
def checkChildParent(ParentIDX_curr, ChildIDX_curr,ChildComment_curr,ChildScore_curr,ChildCont_curr):
idx = data_df.loc[data_df['PostIDX'] == ParentIDX_curr]
if idx.empty is False:
ParentComment = idx.iloc[0,2]
ParentScore = idx.iloc[0,3]
ParentCont = idx.iloc[0,4]
outPut.put([ParentIDX_curr[0], ParentComment,ParentScore,ParentCont,ChildIDX_curr[0], ChildComment_curr[0],ChildScore_curr[0],ChildCont_curr[0]])
if __name__ == '__main__':
print('Process started')
t_start_init = time.time()
t_start = time.time()
noCores = 1
#pool = mp.Pool(processes=noCores)
update_freq = 100
n = 1000
#n = round(len(data_df)/8)
flag_create = 0
flag_run = 0
i = 0
outPut = mp.Queue()
#parent_child_df = pd.DataFrame()
#parent_child_df.coumns = ['PostIDX','ParentIDX']
while i < n:
#print(i)
procs = []
ParentIDX = []
ParentComment = []
ParentScore = []
ParentCont = []
ChildIDX = []
ChildComment = []
ChildScore = []
ChildCont = []
for worker in range(0,noCores):
ParentIDX.append(data_df.iloc[i,1])
ChildIDX.append(data_df.iloc[i,0])
ChildComment.append(data_df.iloc[i,2])
ChildScore.append(data_df.iloc[i,3])
ChildCont.append(data_df.iloc[i,4])
i = i + 1
#when I call the function this way it returns the expected matches
#checkChildParent(ParentIDX,ChildIDX,ChildComment,
# ChildScore,ChildCont)
#when I call the function with Process function nothing appears to be happening
for proc in range(0,noCores):
p = mp.Process(target = checkChildParent, args=(ParentIDX[proc],ChildIDX[proc],ChildComment[proc],ChildScore[proc],ChildCont[proc]))
procs.append(p)
p.start()
#for p in procs:
# p.join()
if outPut.empty() is False:
print(outPut.get())
В верхней части файла находится функция, которая сканирует кадр данных для заданной строки и возвращает кортеж совпавшего родительского и дочернего комментария, если он был найден. Если я вызываю эту функцию нормально, тогда она работает нормально, однако, когда я вызываю функцию с использованием функции Process, она ничего не соответствует !. Я предполагаю, что это форма, в которой аргументы, которые передаются в функцию, передаются в функцию, которая вызывает проблему, но я пытался отладить это весь день и до сих пор не получилось. Если у кого-то есть предложения, пожалуйста, дайте мне знать!
Спасибо!