Pytesseract с бросками Pyspark Ошибка: - модуль pytesseract не найден - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь написать код OCR, используя spark и pytesseract, и я сталкиваюсь с ошибкой модуля pytesseract, несмотря на то, что установлен модуль pytesseract.

import pytesseract
from PIL import Image


path='/XXXX/JupyterLab/notebooks/testdir'
rdd = sc.binaryFiles(path)

rdd.keys().collect()
-->['file:XXX/JupyterLab/notebooks/testdir/copy.png']

input=rdd.keys().map(lambda s: s.replace("file:",""))

def read(x):
    import pytesseract
    image=Image.open(x)
    text=pytesseract.image_to_open(image)
    return text

newRdd= input.map(lambda x : read(x))
newRdd.collect()

"В newRdd.collect () я получаю следующее ошибка "

ModuleNotFoundError: нет модуля с именем 'pytesseract'at org. apache .spark.api. python .BasePythonRunner $ ReaderIterator.handlePythonException (PythonRunner. scala: 298 ) в орг. apache .spark.api. python .PythonRunner $$ anon $ 1.read (PythonRunner. scala: 438) в орг. apache .spark.api. python .PythonRunner $$ anon $ 1.read (PythonRunner. scala: 421) в орг. apache .spark.api. python .BasePythonRunner $ ReaderIterator.hasNext (PythonRunner. scala: 252) в орг. apache .spark .InterruptibleIterator.hasNext (InterruptibleIterator. scala: 37) в scala .collection.Iterator $ class.foreach (Iterator. scala: 893) в org. apache .spark.InterruptibleIterator.foreach (InterruptibleIterator. scala: 28) в scala .collection.generi c. Растущий $ класс. $ Плюс $ плюс $ eq (Growable. scala: 59) в scala .col lection.mutable.ArrayBuffer. $ plus $ plus $ eq (ArrayBuffer. scala: 104) в scala .collection.mutable.ArrayBuffer. $ plus $ plus $ eq (ArrayBuffer. scala: 48) в scala .collection.TraversableOnce $ class.to (TraversableOnce. scala: 310) в орг. apache .spark.InterruptibleIterator.to (InterruptibleIterator. scala: 28) в scala .collection.TraversableOnce $ класс. toBuffer (TraversableOnce. scala: 302) в орг. apache .spark.InterruptibleIterator.toBuffer (InterruptibleIterator. scala: 28) в scala .collection.TraversableOnce $ class.toArray (TraversableOnce. scala: 289) в орг. apache .spark.InterruptibleIterator.toArray (InterruptibleIterator. scala: 28) в орг. apache .spark.rdd.RDD $$ anonfun $ собрать $ 1 $$ anonfun $ 16.применить (СДР. scala: 960) в орг. apache .spark.rdd.RDD $$ anonfun $ collect $ 1 $$ anonfun $ 16.apply (RDD. scala: 960) в org. apache .spark.SparkContext $ $ anonfun $ runJob $ 5.apply (SparkContext. scala: 2111) в орг. apache .spark.SparkContext $$ anonfun $ runJob $ 5.apply (SparkContext. scala: 2111) в орг. apache. spark.scheduler.ResultTask.runTask (R esultTask. scala: 87) в орг. apache .spark.scheduler.Task.run (Задача. scala: 109) в орг. apache .spark.executor.Executor $ TaskRunner.run (Исполнитель. scala: 420) в java .util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java: 1149) в java .util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor. java: 6) at java .lang.Thread.run (Thread. java: 748)

Я не уверен, как передать rdd.key (), который содержит путь к изображению, в pytesseract.image_to_String () используя Image.open ().

Спасибо.

...