#scala #apache-spark #databricks #azure-databricks
#scala #apache-spark #databricks #azure-databricks
Вопрос:
Я пытаюсь прочитать файл vcf с помощью spark.
Spark 3.0
spark.read.format("com.databricks.vcf").load("vcfFilePath")
Ошибка:
java.lang.ClassNotFoundException: Failed to find data source: com.databricks.vcf. Please find packages at http://spark.apache.org/third-party-projects.html
at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:674)
at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSourceV2(DataSource.scala:728)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:230)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:214)
... 49 elided
Caused by: java.lang.ClassNotFoundException: com.databricks.vcf.DefaultSource
at scala.reflect.internal.util.AbstractFileClassLoader.findClass(AbstractFileClassLoader.scala:72)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.apache.spark.sql.execution.datasources.DataSource$.$anonfun$lookupDataSource$5(DataSource.scala:648)
at scala.util.Try$.apply(Try.scala:213)
at org.apache.spark.sql.execution.datasources.DataSource$.$anonfun$lookupDataSource$4(DataSource.scala:648)
at scala.util.Failure.orElse(Try.scala:224)
at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:648)
... 52 more
Я пробовал использовать spark в локальной ubuntu, а также пробовал в среде databricks. Можете ли вы, ребята, помочь мне с этим?
Комментарии:
1. вы поместили файл vcf jar в $SPARK_HOME/jars?
2. вы используете Genomic runtime?
3. Я не помещал банки в spark home / jars. Я передаю его в —packages @mck
4. Я не использую Genomic runtime, но я могу прочитать файл VCF, он выдает ошибку несоответствия схемы. @AlexOtt
Ответ №1:
В Databricks (как упоминал Алекс) вы должны использовать среду выполнения Databricks Genomics (см. Рисунок Ниже).
Если вы хотите работать с файлами VCF с помощью Spark на своем локальном компьютере, вам нужно добавить пакет Glow вручную. Этот пакет содержит средство чтения VCF. Официальная документация здесь подробно описывает шаги, которые вам нужно выполнить.
Для PySpark локально инструкции выглядят примерно так:
# Install pyspark
pip install pyspark==3.0.1
# Install Glow
pip install glow.py
# Start PySpark with the Glow Maven package
psypark --packages io.projectglow:glow-spark3_2.12:0.6.0
В оболочке Python:
import glow
glow.register(spark)
df = spark.read.format('vcf').load(path)
Чтобы загрузить пример из упомянутого вами PDF-документа, вы должны убедиться, что пробелы заменены табуляцией, иначе вы получите искаженное исключение заголовка. Формат VCF требует, чтобы каждая запись и заголовок были разделены табуляцией.
Комментарии:
1. Я использую spark в Local, но я взял пример файла по этому пути ( samtools.github.io/hts-specs/VCFv4.2.pdf ). Я получаю следующую ошибку. Вызвано: htsjdk.tribble. TribbleException $InvalidHeader: ваш входной файл имеет неправильный заголовок: неизвестное имя столбца ‘CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA00001 NA00002’; он не соответствует законному имени заголовка столбца.
2. Какой пример вы имеете в виду? Вы скопировали пример из документа PDF? Это не работает, потому что он содержит пробелы, а не табуляции. Столбцы и поля должны быть разделены табуляциями. Если вы замените пробелы табуляцией, то пример из PDF будет работать. Например. как я сделал здесь: pastebin.com/Ap7HkvMN
3. Да, @Bram, я скопировал пример из PDF. Но я исправил это с помощью вкладки, которая теперь работает.