abstract class DataFrameWriter[T] extends AnyRef
Interface used to write a org.apache.spark.sql.Dataset to external storage systems (e.g.
file systems, key-value stores, etc). Use Dataset.write to access this.
- Annotations
- @Stable()
- Source
- DataFrameWriter.scala
- Since
- 1.4.0 
- Alphabetic
- By Inheritance
- DataFrameWriter
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
-  new DataFrameWriter()
Abstract Value Members
-   abstract  def insertInto(tableName: String): UnitInserts the content of the DataFrameto the specified table.Inserts the content of the DataFrameto the specified table. It requires that the schema of theDataFrameis the same as the schema of the table.- Since
- 1.4.0 
- Note
- Unlike ,- saveAsTable,- insertIntoignores the column names and just uses position-based resolution. For example:- SaveMode.ErrorIfExists and SaveMode.Ignore behave as SaveMode.Append in - insertIntoas- insertIntois not a table creating operation.- scala> Seq((1, 2)).toDF("i", "j").write.mode("overwrite").saveAsTable("t1") scala> Seq((3, 4)).toDF("j", "i").write.insertInto("t1") scala> Seq((5, 6)).toDF("a", "b").write.insertInto("t1") scala> sql("select * from t1").show +---+---+ | i| j| +---+---+ | 5| 6| | 3| 4| | 1| 2| +---+---+ - Because it inserts data to an existing table, format or options will be ignored. 
 
-   abstract  def save(): UnitSaves the content of the DataFrameas the specified table.Saves the content of the DataFrameas the specified table.- Since
- 1.4.0 
 
-   abstract  def save(path: String): UnitSaves the content of the DataFrameat the specified path.Saves the content of the DataFrameat the specified path.- Since
- 1.4.0 
 
-   abstract  def saveAsTable(tableName: String): UnitSaves the content of the DataFrameas the specified table.Saves the content of the DataFrameas the specified table.In the case the table already exists, behavior of this function depends on the save mode, specified by the modefunction (default to throwing an exception). WhenmodeisOverwrite, the schema of theDataFramedoes not need to be the same as that of the existing table.When modeisAppend, if there is an existing table, we will use the format and options of the existing table. The column order in the schema of theDataFramedoesn't need to be same as that of the existing table. UnlikeinsertInto,saveAsTablewill use the column names to find the correct column positions. For example:scala> Seq((1, 2)).toDF("i", "j").write.mode("overwrite").saveAsTable("t1") scala> Seq((3, 4)).toDF("j", "i").write.mode("append").saveAsTable("t1") scala> sql("select * from t1").show +---+---+ | i| j| +---+---+ | 1| 2| | 4| 3| +---+---+ In this method, save mode is used to determine the behavior if the data source table exists in Spark catalog. We will always overwrite the underlying data of data source (e.g. a table in JDBC data source) if the table doesn't exist in Spark catalog, and will always append to the underlying data of data source if the table already exists. When the DataFrame is created from a non-partitioned HadoopFsRelationwith a single input path, and the data source provider can be mapped to an existing Hive builtin SerDe (i.e. ORC and Parquet), the table is persisted in a Hive compatible format, which means other systems like Hive will be able to read this table. Otherwise, the table is persisted in a Spark SQL specific format.- Since
- 1.4.0 
 
Concrete Value Members
-   final  def !=(arg0: Any): Boolean- Definition Classes
- AnyRef → Any
 
-   final  def ##: Int- Definition Classes
- AnyRef → Any
 
-   final  def ==(arg0: Any): Boolean- Definition Classes
- AnyRef → Any
 
-   final  def asInstanceOf[T0]: T0- Definition Classes
- Any
 
-    def assertNotBucketed(operation: String): Unit- Attributes
- protected
 
-    def assertNotClustered(operation: String): Unit- Attributes
- protected
 
-    def assertNotPartitioned(operation: String): Unit- Attributes
- protected
 
-    def bucketBy(numBuckets: Int, colName: String, colNames: String*): DataFrameWriter.this.typeBuckets the output by the given columns. Buckets the output by the given columns. If specified, the output is laid out on the file system similar to Hive's bucketing scheme, but with a different bucket hash function and is not compatible with Hive's bucketing. This is applicable for all file-based data sources (e.g. Parquet, JSON) starting with Spark 2.1.0. - Annotations
- @varargs()
- Since
- 2.0 
 
-    var bucketColumnNames: Option[Seq[String]]- Attributes
- protected
 
-    def clone(): AnyRef- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @IntrinsicCandidate() @native()
 
-    def clusterBy(colName: String, colNames: String*): DataFrameWriter.this.typeClusters the output by the given columns on the storage. Clusters the output by the given columns on the storage. The rows with matching values in the specified clustering columns will be consolidated within the same group. For instance, if you cluster a dataset by date, the data sharing the same date will be stored together in a file. This arrangement improves query efficiency when you apply selective filters to these clustering columns, thanks to data skipping. - Annotations
- @varargs()
- Since
- 4.0 
 
-    var clusteringColumns: Option[Seq[String]]- Attributes
- protected
 
-    def csv(path: String): UnitSaves the content of the DataFramein CSV format at the specified path.Saves the content of the DataFramein CSV format at the specified path. This is equivalent to:format("csv").save(path)You can find the CSV-specific options for writing CSV files in <a href="https://spark.apache.org/docs/latest/sql-data-sources-csv.html#data-source-option"> Data Source Option in the version you use. - Since
- 2.0.0 
 
-    var curmode: SaveMode- Attributes
- protected
 
-   final  def eq(arg0: AnyRef): Boolean- Definition Classes
- AnyRef
 
-    def equals(arg0: AnyRef): Boolean- Definition Classes
- AnyRef → Any
 
-    var extraOptions: CaseInsensitiveMap[String]- Attributes
- protected
 
-    def format(source: String): DataFrameWriter.this.typeSpecifies the underlying output data source. Specifies the underlying output data source. Built-in options include "parquet", "json", etc. - Since
- 1.4.0 
 
-   final  def getClass(): Class[_ <: AnyRef]- Definition Classes
- AnyRef → Any
- Annotations
- @IntrinsicCandidate() @native()
 
-    def hashCode(): Int- Definition Classes
- AnyRef → Any
- Annotations
- @IntrinsicCandidate() @native()
 
-    def isBucketed(): Boolean- Attributes
- protected
 
-   final  def isInstanceOf[T0]: Boolean- Definition Classes
- Any
 
-    def jdbc(url: String, table: String, connectionProperties: Properties): UnitSaves the content of the DataFrameto an external database table via JDBC.Saves the content of the DataFrameto an external database table via JDBC. In the case the table already exists in the external database, behavior of this function depends on the save mode, specified by themodefunction (default to throwing an exception).Don't create too many partitions in parallel on a large cluster; otherwise Spark might crash your external database systems. JDBC-specific option and parameter documentation for storing tables via JDBC in <a href="https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html#data-source-option"> Data Source Option in the version you use. - table
- Name of the table in the external database. 
- connectionProperties
- JDBC database connection arguments, a list of arbitrary string tag/value. Normally at least a "user" and "password" property should be included. "batchsize" can be used to control the number of rows per insert. "isolationLevel" can be one of "NONE", "READ_COMMITTED", "READ_UNCOMMITTED", "REPEATABLE_READ", or "SERIALIZABLE", corresponding to standard transaction isolation levels defined by JDBC's Connection object, with default of "READ_UNCOMMITTED". 
 - Since
- 1.4.0 
 
-    def json(path: String): UnitSaves the content of the DataFramein JSON format ( JSON Lines text format or newline-delimited JSON) at the specified path.Saves the content of the DataFramein JSON format ( JSON Lines text format or newline-delimited JSON) at the specified path. This is equivalent to:format("json").save(path)You can find the JSON-specific options for writing JSON files in <a href="https://spark.apache.org/docs/latest/sql-data-sources-json.html#data-source-option"> Data Source Option in the version you use. - Since
- 1.4.0 
 
-    def mode(saveMode: String): DataFrameWriter.this.typeSpecifies the behavior when data or table already exists. Specifies the behavior when data or table already exists. Options include: - overwrite: overwrite the existing data.
- append: append the data.
- ignore: ignore the operation (i.e. no-op).
- erroror- errorifexists: default option, throw an exception at runtime.
 - Since
- 1.4.0 
 
-    def mode(saveMode: SaveMode): DataFrameWriter.this.typeSpecifies the behavior when data or table already exists. Specifies the behavior when data or table already exists. Options include: - SaveMode.Overwrite: overwrite the existing data.
- SaveMode.Append: append the data.
- SaveMode.Ignore: ignore the operation (i.e. no-op).
- SaveMode.ErrorIfExists: throw an exception at runtime.
 The default option is ErrorIfExists.- Since
- 1.4.0 
 
-   final  def ne(arg0: AnyRef): Boolean- Definition Classes
- AnyRef
 
-   final  def notify(): Unit- Definition Classes
- AnyRef
- Annotations
- @IntrinsicCandidate() @native()
 
-   final  def notifyAll(): Unit- Definition Classes
- AnyRef
- Annotations
- @IntrinsicCandidate() @native()
 
-    var numBuckets: Option[Int]- Attributes
- protected
 
-    def option(key: String, value: Double): DataFrameWriter.this.typeAdds an output option for the underlying data source. Adds an output option for the underlying data source. All options are maintained in a case-insensitive way in terms of key names. If a new option has the same key case-insensitively, it will override the existing option. - Since
- 2.0.0 
 
-    def option(key: String, value: Long): DataFrameWriter.this.typeAdds an output option for the underlying data source. Adds an output option for the underlying data source. All options are maintained in a case-insensitive way in terms of key names. If a new option has the same key case-insensitively, it will override the existing option. - Since
- 2.0.0 
 
-    def option(key: String, value: Boolean): DataFrameWriter.this.typeAdds an output option for the underlying data source. Adds an output option for the underlying data source. All options are maintained in a case-insensitive way in terms of key names. If a new option has the same key case-insensitively, it will override the existing option. - Since
- 2.0.0 
 
-    def option(key: String, value: String): DataFrameWriter.this.typeAdds an output option for the underlying data source. Adds an output option for the underlying data source. All options are maintained in a case-insensitive way in terms of key names. If a new option has the same key case-insensitively, it will override the existing option. - Since
- 1.4.0 
 
-    def options(options: Map[String, String]): DataFrameWriter.this.typeAdds output options for the underlying data source. Adds output options for the underlying data source. All options are maintained in a case-insensitive way in terms of key names. If a new option has the same key case-insensitively, it will override the existing option. - Since
- 1.4.0 
 
-    def options(options: Map[String, String]): DataFrameWriter.this.type(Scala-specific) Adds output options for the underlying data source. (Scala-specific) Adds output options for the underlying data source. All options are maintained in a case-insensitive way in terms of key names. If a new option has the same key case-insensitively, it will override the existing option. - Since
- 1.4.0 
 
-    def orc(path: String): UnitSaves the content of the DataFramein ORC format at the specified path.Saves the content of the DataFramein ORC format at the specified path. This is equivalent to:format("orc").save(path)ORC-specific option(s) for writing ORC files can be found in Data Source Option in the version you use. - Since
- 1.5.0 
 
-    def parquet(path: String): UnitSaves the content of the DataFramein Parquet format at the specified path.Saves the content of the DataFramein Parquet format at the specified path. This is equivalent to:format("parquet").save(path)Parquet-specific option(s) for writing Parquet files can be found in Data Source Option in the version you use. - Since
- 1.4.0 
 
-    def partitionBy(colNames: String*): DataFrameWriter.this.typePartitions the output by the given columns on the file system. Partitions the output by the given columns on the file system. If specified, the output is laid out on the file system similar to Hive's partitioning scheme. As an example, when we partition a dataset by year and then month, the directory layout would look like: - year=2016/month=01/
- year=2016/month=02/
 Partitioning is one of the most widely used techniques to optimize physical data layout. It provides a coarse-grained index for skipping unnecessary data reads when queries have predicates on the partitioned columns. In order for partitioning to work well, the number of distinct values in each column should typically be less than tens of thousands. This is applicable for all file-based data sources (e.g. Parquet, JSON) starting with Spark 2.1.0. - Annotations
- @varargs()
- Since
- 1.4.0 
 
-    var partitioningColumns: Option[Seq[String]]- Attributes
- protected
 
-    def sortBy(colName: String, colNames: String*): DataFrameWriter.this.typeSorts the output in each bucket by the given columns. Sorts the output in each bucket by the given columns. This is applicable for all file-based data sources (e.g. Parquet, JSON) starting with Spark 2.1.0. - Annotations
- @varargs()
- Since
- 2.0 
 
-    var sortColumnNames: Option[Seq[String]]- Attributes
- protected
 
-    var source: String- Attributes
- protected
 
-   final  def synchronized[T0](arg0: => T0): T0- Definition Classes
- AnyRef
 
-    def text(path: String): UnitSaves the content of the DataFramein a text file at the specified path.Saves the content of the DataFramein a text file at the specified path. The DataFrame must have only one column that is of string type. Each row becomes a new line in the output file. For example:// Scala: df.write.text("/path/to/output") // Java: df.write().text("/path/to/output") The text files will be encoded as UTF-8. You can find the text-specific options for writing text files in <a href="https://spark.apache.org/docs/latest/sql-data-sources-text.html#data-source-option"> Data Source Option in the version you use. - Since
- 1.6.0 
 
-    def toString(): String- Definition Classes
- AnyRef → Any
 
-    def validatePartitioning(): UnitValidate that clusterBy is not used with partitionBy or bucketBy. Validate that clusterBy is not used with partitionBy or bucketBy. - Attributes
- protected
 
-   final  def wait(arg0: Long, arg1: Int): Unit- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
 
-   final  def wait(arg0: Long): Unit- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
 
-   final  def wait(): Unit- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
 
-    def xml(path: String): UnitSaves the content of the DataFramein XML format at the specified path.Saves the content of the DataFramein XML format at the specified path. This is equivalent to:format("xml").save(path)Note that writing a XML file from DataFramehaving a fieldArrayTypewith its element asArrayTypewould have an additional nested field for the element. For example, theDataFramehaving a field below,fieldA [[data1], [data2]]would produce a XML file below. 
- data1
- data2
Namely, roundtrip in writing and reading can end up in different schema structure. You can find the XML-specific options for writing XML files in <a href="https://spark.apache.org/docs/latest/sql-data-sources-xml.html#data-source-option"> Data Source Option in the version you use. 
Deprecated Value Members
-    def finalize(): Unit- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated
- (Since version 9)