Кажется, вы путаете mysql_query с mysqli_query. Первый принимает оператор sql как первый параметр, в то время как последний ожидает идентификатор ссылки (созданный Mysqli :: connect) в качестве первого параметра и оператор как второй.
Эти два расширения не совместимы друг с другом. Я предлагаю вам выбрать один, прочитать страницы руководства о том, как подключиться, выполнить запросы и т. Д., И забыть другое. В результате, mysqli является более функциональным, но более сложным в результате.
Доступ к файлам, доступным через SparkContext.addFile
(и --files
), можно получить через SparkFiles
. Он предоставляет два метода:
getDirectory()
- возвращает корневой каталог для распределенных файлов get(filename)
- возвращает абсолютный путь к файлу Я не уверен, существуют ли какие-то ограничения Dataproc, но что-то вроде этого должно работать нормально:
from pyspark import SparkFiles
with open(SparkFiles.get('test.yml')) as test_file:
logging.info(test_file.read())
Да, Шагун прав.
В принципе, когда вы отправляете искровое задание, которое искроет, оно не сериализует файл, который вы хотите обработать каждому работнику. Вам нужно будет сделать это самостоятельно.
Как правило, вам придется помещать файл в общую файловую систему, такую как HDFS, S3 (amazon) или любую другую DFS, к которой могут обращаться все рабочие. Как только вы это сделаете, и укажите место назначения файла в своем искровом сценарии, искровое задание сможет читать и обрабатывать по вашему желанию.
Однако, сказав это, копирование файла в тот же назначение во ВСЕХ ваших работников и файловая структура мастера также работают. Exp, вы можете создавать папки, такие как /opt/spark-job/all-files/
во всех искровых узлах, rsync
файл для всех них, а затем вы можете использовать файл в своем искровом скрипте. Но, пожалуйста, не делайте этого. DFS или S3 лучше, чем этот подход.