【发布时间】:2017-06-01 06:54:23
【问题描述】:
我需要将各种文件(不同类型)加载到 spark 数据框中。 Databricks 是否支持所有这些文件格式?如果是,我在哪里可以获得每种文件格式支持的选项列表?
delimited
csv
parquet
avro
excel
json
谢谢
【问题讨论】:
标签: apache-spark apache-spark-sql databricks
我需要将各种文件(不同类型)加载到 spark 数据框中。 Databricks 是否支持所有这些文件格式?如果是,我在哪里可以获得每种文件格式支持的选项列表?
delimited
csv
parquet
avro
excel
json
谢谢
【问题讨论】:
标签: apache-spark apache-spark-sql databricks
我不确切知道 Databricks 提供哪些开箱即用(预安装),但您可以使用 org.apache.spark.sql.execution.datasources.DataSource 对象(引用 scaladoc)进行一些逆向工程:
Spark SQL 中负责表示可插拔数据源的主类
所有数据源通常使用DataSourceRegister接口注册自己(并使用shortName提供它们的别名):
数据源应该实现这个特征,以便他们可以为他们的数据源注册一个别名。
阅读DataSourceRegister 的scaladoc 你会发现:
这允许用户将数据源别名作为格式类型而不是完全限定的类名。
所以,YMMV。
除非您在 Databricks 上找到权威答案,否则您可能希望(按照 DataSource.lookupDataSource 并)使用 Java 的 ServiceLoader.load 方法查找所有已注册的 DataSourceRegister 接口实现。
// start a Spark application with external module with a separate DataSource
$ ./bin/spark-shell --packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.3.0-SNAPSHOT
import java.util.ServiceLoader
import org.apache.spark.sql.sources.DataSourceRegister
val formats = ServiceLoader.load(classOf[DataSourceRegister])
import scala.collection.JavaConverters._
scala> formats.asScala.map(_.shortName).foreach(println)
orc
hive
libsvm
csv
jdbc
json
parquet
text
console
socket
kafka
我在哪里可以获得每种文件格式支持的选项列表?
这是不可能的,因为没有可遵循的 API(如在 Spark MLlib 中)来定义选项。每种格式都会自行执行此操作...不幸的是,您最好的选择是阅读文档或(更权威的)源代码。
【讨论】:
Spark 支持所有这些格式,对于 Excel 文件,您可以使用 spark-excel 库。
【讨论】: