В чем разница между sqlContext.read.load и sqlContext.read.text?

Я только пытаюсь прочитать текстовый файл в RDD pyspark и замечаю огромные различия между sqlContext.read.load и sqlContext.read.text.

s3_single_file_inpath='s3a://bucket-name/file_name'

indata = sqlContext.read.load(s3_single_file_inpath, format='com.databricks.spark.csv', header='true', inferSchema='false',sep=',')
indata = sqlContext.read.text(s3_single_file_inpath)

Команда sqlContext.read.load выше не работает с

Py4JJavaError: An error occurred while calling o227.load.
: java.lang.ClassNotFoundException: Failed to find data source: com.databricks.spark.csv. Please find packages at http://spark-packages.org

А второй удается?

Теперь меня это смущает, потому что все ресурсы, которые я вижу в Интернете, говорят об использовании sqlContext.read.load, включая этот: https://spark.apache.org/docs/1.6.1/sql-programming-guide.html.

Мне не ясно, когда использовать, какой из них использовать, когда. Есть ли четкое различие между ними?


person makansij    schedule 05.12.2017    source источник
comment
Каковы огромные различия? Я вижу только один в вашем вопросе, что один терпит неудачу, а другой нет.   -  person Jacek Laskowski    schedule 05.12.2017


Ответы (2)


В чем разница между sqlContext.read.load и sqlContext.read.text?

sqlContext.read.load предполагает parquet в качестве формата источника данных, а sqlContext.read.text предполагает формат text.

С помощью sqlContext.read.load вы можете определить формат источника данных, используя параметр format.


В зависимости от версии Spark 1.6 и 2.x вы можете загружать или не загружать внешний пакет Spark для поддержки формата csv.

Начиная со Spark 2.0 вам больше не нужно загружать пакет Spark spark-csv, поскольку (цитируя официальная документация):

ПРИМЕЧАНИЕ. Эта функция встроена в Apache Spark 2.x. Этот пакет находится в режиме обслуживания, и мы принимаем только исправления критических ошибок.

Это объясняет, почему вы запутались, поскольку, возможно, вы использовали Spark 1.6.x и не загрузили пакет Spark для поддержки csv.

Теперь меня это смущает, потому что все ресурсы, которые я вижу в Интернете, говорят об использовании sqlContext.read.load, включая этот: https://spark.apache.org/docs/1.6.1/sql-programming-guide.html.

https://spark.apache.org/docs/1.6.1/sql-programming-guide.html предназначен для Spark 1.6.1, когда spark-csv пакет Spark не был частью Spark. Это произошло в Spark 2.0.


Мне не ясно, когда использовать, какой из них использовать, когда. Есть ли четкое различие между ними?

На самом деле если вы не используете Spark 2.x.

Однако, если вы используете Spark 1.6.x, spark-csv необходимо загрузить отдельно с помощью параметра --packages (как описано в Использование с оболочкой Spark):

Этот пакет можно добавить в Spark с помощью параметра командной строки --packages. Например, чтобы включить его при запуске spark shell


На самом деле вы по-прежнему можете явно использовать формат com.databricks.spark.csv в Spark 2.x, поскольку он распознается внутри.

person Jacek Laskowski    schedule 05.12.2017
comment
то есть вы имеете в виду, что независимо от того, используете ли вы spark.read.csv()/spark.read.text() или spark.read.load(), это одно и то же и не имеет различий для Spark 2.x? - person cph_sto; 19.11.2018
comment
В значительной степени да. Есть некоторые оптимизации, которые источники данных могут использовать, чтобы сделать загрузку более эффективной (например, вывод схемы), но это лишь второстепенный вопрос в обсуждении. - person Jacek Laskowski; 19.11.2018
comment
О, это очень обнадеживает. Большое спасибо, Яцек. Если я могу задать вам еще один вопрос - при использовании этих функций импорта мы можем указать numberOfPartitions? Или мы должны прибегнуть к repartition() потом? Если хотите, я могу опубликовать его как еще один вопрос и сообщить вам, чтобы вы могли ответить на него там. Пожалуйста, дай мне знать. - person cph_sto; 19.11.2018
comment
Количество разделов? Нет. Он ортогонален источнику данных, поэтому ему не приходится иметь дело с такими низкоуровневыми вещами, как разделы. - person Jacek Laskowski; 19.11.2018
comment
Ну, ваши рассуждения на данный момент достаточно высоки для меня, чтобы понять :) Я буду исследовать это дальше. Большое спасибо, Яцек. - person cph_sto; 19.11.2018
comment
Привет, Яцек, не могли бы вы ответить на него - stackoverflow.com/questions/53431989/, ваша точка зрения будет очень ценной. - person cph_sto; 22.11.2018

Разница в следующем:

  • text — это встроенный формат ввода в Spark 1.6.
  • com.databricks.spark.csv — это сторонний пакет в Spark 1.6.

Чтобы использовать сторонний Spark CSV (больше не требуется в Spark 2.0), вы должны следовать инструкциям на сайте spark-csv, например предоставить

 --packages com.databricks:spark-csv_2.10:1.5.0  

аргумент с командами spark-submit / pyspark.

Кроме того, sqlContext.read.formatName(...) является синтаксическим сахаром для sqlContext.read.format("formatName") и sqlContext.read.load(..., format=formatName).

person Alper t. Turker    schedule 05.12.2017