テキストファイル
Spark SQLは、テキストファイルのファイルまたはディレクトリをSpark DataFrameに読み込むためのspark.read().text("file_name")
と、テキストファイルに書き込むためのdataframe.write().text("path")
を提供します。テキストファイルを読み込む場合、各行はデフォルトで文字列“value”列を持つ各行になります。以下の例に示すように、行区切り記号を変更できます。option()
関数を使って、行区切り文字、圧縮などの動作の制御など、読み込みや書き込みの動作をカスタマイズできます。
// A text dataset is pointed to by path.
// The path can be either a single text file or a directory of text files
val path = "examples/src/main/resources/people.txt"
val df1 = spark.read.text(path)
df1.show()
// +-----------+
// | value|
// +-----------+
// |Michael, 29|
// | Andy, 30|
// | Justin, 19|
// +-----------+
// You can use 'lineSep' option to define the line separator.
// The line separator handles all `\r`, `\r\n` and `\n` by default.
val df2 = spark.read.option("lineSep", ",").text(path)
df2.show()
// +-----------+
// | value|
// +-----------+
// | Michael|
// | 29\nAndy|
// | 30\nJustin|
// | 19\n|
// +-----------+
// You can also use 'wholetext' option to read each input file as a single row.
val df3 = spark.read.option("wholetext", true).text(path)
df3.show()
// +--------------------+
// | value|
// +--------------------+
// |Michael, 29\nAndy...|
// +--------------------+
// "output" is a folder which contains multiple text files and a _SUCCESS file.
df1.write.text("output")
// You can specify the compression format using the 'compression' option.
df1.write.option("compression", "gzip").text("output_compressed")
例の完全なコードは Spark のリポジトリの "examples/src/main/scala/org/apache/spark/examples/sql/SQLDataSourceExample.scala" で見つかります。
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
// A text dataset is pointed to by path.
// The path can be either a single text file or a directory of text files
String path = "examples/src/main/resources/people.txt";
Dataset<Row> df1 = spark.read().text(path);
df1.show();
// +-----------+
// | value|
// +-----------+
// |Michael, 29|
// | Andy, 30|
// | Justin, 19|
// +-----------+
// You can use 'lineSep' option to define the line separator.
// The line separator handles all `\r`, `\r\n` and `\n` by default.
Dataset<Row> df2 = spark.read().option("lineSep", ",").text(path);
df2.show();
// +-----------+
// | value|
// +-----------+
// | Michael|
// | 29\nAndy|
// | 30\nJustin|
// | 19\n|
// +-----------+
// You can also use 'wholetext' option to read each input file as a single row.
Dataset<Row> df3 = spark.read().option("wholetext", "true").text(path);
df3.show();
// +--------------------+
// | value|
// +--------------------+
// |Michael, 29\nAndy...|
// +--------------------+
// "output" is a folder which contains multiple text files and a _SUCCESS file.
df1.write().text("output");
// You can specify the compression format using the 'compression' option.
df1.write().option("compression", "gzip").text("output_compressed");
例の完全なコードは Spark のリポジトリの "examples/src/main/java/org/apache/spark/examples/sql/JavaSQLDataSourceExample.java" で見つかります。
# spark is from the previous example
sc = spark.sparkContext
# A text dataset is pointed to by path.
# The path can be either a single text file or a directory of text files
path = "examples/src/main/resources/people.txt"
df1 = spark.read.text(path)
df1.show()
# +-----------+
# | value|
# +-----------+
# |Michael, 29|
# | Andy, 30|
# | Justin, 19|
# +-----------+
# You can use 'lineSep' option to define the line separator.
# The line separator handles all `\r`, `\r\n` and `\n` by default.
df2 = spark.read.text(path, lineSep=",")
df2.show()
# +-----------+
# | value|
# +-----------+
# | Michael|
# | 29\nAndy|
# | 30\nJustin|
# | 19\n|
# +-----------+
# You can also use 'wholetext' option to read each input file as a single row.
df3 = spark.read.text(path, wholetext=True)
df3.show()
# +--------------------+
# | value|
# +--------------------+
# |Michael, 29\nAndy...|
# +--------------------+
# "output" is a folder which contains multiple text files and a _SUCCESS file.
df1.write.csv("output")
# You can specify the compression format using the 'compression' option.
df1.write.text("output_compressed", compression="gzip")
例の完全なコードは Spark のリポジトリの "examples/src/main/python/sql/datasource.py" で見つかります。
データソース オプション
テキストのデータソースオプションは次のようにして設定できます:
- the
.option
/.options
methods ofDataFrameReader
DataFrameWriter
DataStreamReader
DataStreamWriter
- CREATE TABLE USING DATA_SOURCEの
OPTIONS
句
プロパティ名 | デフォルト | 意味 | スコープ |
---|---|---|---|
wholetext |
false |
trueの場合、入力パス各ファイルを単一の行として読み込みます。 | read |
lineSep |
\r , \r\n , \n (読み込み用), \n (書き込み用) |
読み込みまたは書き込みに使われる行区切りを定義します。 | read/write |
圧縮 |
(none) | ファイルに保存する時に使う圧縮コーディック。大文字と小文字を区別しない既知の短縮名の1つです(none, bzip2, gzip, lz4, snappy, deflate)。 | write |
その他の汎用オプションは、汎用ファイルソースオプションにあります。