文本文件
Spark SQL 提供了
spark.read().text("file_name")
以将文件或文本文件目录读取到 Spark DataFrame 中,并使用
dataframe.write().text("path")
将数据写入文本文件。当读取文本文件时,每一行默认成为一行,其中包含字符串“value”列。行分隔符可以通过下面的示例进行更改。可以使用
option()
函数自定义读取或写入的行为,例如控制行分隔符、压缩等行为。
# spark 来源于前面的示例
sc = spark.sparkContext
# 文本数据集由路径指向。
# 路径可以是单个文本文件或文本文件的目录
path = "examples/src/main/resources/people.txt"
df1 = spark.read.text(path)
df1.show()
# +-----------+
# | value|
# +-----------+
# |Michael, 29|
# | Andy, 30|
# | Justin, 19|
# +-----------+
# 您可以使用 'lineSep' 选项来定义行分隔符。
# 行分隔符默认处理所有 `\r`、`\r\n` 和 `\n`。
df2 = spark.read.text(path, lineSep=",")
df2.show()
# +-----------+
# | value|
# +-----------+
# | Michael|
# | 29\nAndy|
# | 30\nJustin|
# | 19\n|
# +-----------+
# 您还可以使用 'wholetext' 选项将每个输入文件作为单行读取。
df3 = spark.read.text(path, wholetext=True)
df3.show()
# +--------------------+
# | value|
# +--------------------+
# |Michael, 29\nAndy...|
# +--------------------+
# "output" 是一个文件夹,包含多个文本文件和一个 _SUCCESS 文件。
df1.write.csv("output")
# 您可以使用 'compression' 选项指定压缩格式。
df1.write.text("output_compressed", compression="gzip")
Find full example code at "examples/src/main/python/sql/datasource.py" in the Spark repo.
// 一个文本数据集通过路径指向。
// 路径可以是单个文本文件或文本文件的目录
val path = "examples/src/main/resources/people.txt"
val df1 = spark.read.text(path)
df1.show()
// +-----------+
// | value|
// +-----------+
// |Michael, 29|
// | Andy, 30|
// | Justin, 19|
// +-----------+
// 你可以使用 'lineSep' 选项来定义行分隔符。
// 行分隔符默认处理所有 `\r`, `\r\n` 和 `\n`。
val df2 = spark.read.option("lineSep", ",").text(path)
df2.show()
// +-----------+
// | value|
// +-----------+
// | Michael|
// | 29\nAndy|
// | 30\nJustin|
// | 19\n|
// +-----------+
// 你还可以使用 'wholetext' 选项将每个输入文件作为单行读取。
val df3 = spark.read.option("wholetext", true).text(path)
df3.show()
// +--------------------+
// | value|
// +--------------------+
// |Michael, 29\nAndy...|
// +--------------------+
// "output" 是一个包含多个文本文件和一个 _SUCCESS 文件的文件夹。
df1.write.text("output")
// 你可以使用 'compression' 选项指定压缩格式。
df1.write.option("compression", "gzip").text("output_compressed")
Find full example code at "examples/src/main/scala/org/apache/spark/examples/sql/SQLDataSourceExample.scala" in the Spark repo.
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
// 文本数据集由路径指向。
// 路径可以是单个文本文件或文本文件的目录
String path = "examples/src/main/resources/people.txt";
Dataset<Row> df1 = spark.read().text(path);
df1.show();
// +-----------+
// | value|
// +-----------+
// |Michael, 29|
// | Andy, 30|
// | Justin, 19|
// +-----------+
// 你可以使用 'lineSep' 选项来定义行分隔符。
// 行分隔符默认处理所有 `\r`、`\r\n` 和 `\n`。
Dataset<Row> df2 = spark.read().option("lineSep", ",").text(path);
df2.show();
// +-----------+
// | value|
// +-----------+
// | Michael|
// | 29\nAndy|
// | 30\nJustin|
// | 19\n|
// +-----------+
// 你还可以使用 'wholetext' 选项将每个输入文件作为单行读取。
Dataset<Row> df3 = spark.read().option("wholetext", "true").text(path);
df3.show();
// +--------------------+
// | value|
// +--------------------+
// |Michael, 29\nAndy...|
// +--------------------+
// "output" 是一个包含多个文本文件和一个 _SUCCESS 文件的文件夹。
df1.write().text("output");
// 你可以使用 'compression' 选项指定压缩格式。
df1.write().option("compression", "gzip").text("output_compressed");
Find full example code at "examples/src/main/java/org/apache/spark/examples/sql/JavaSQLDataSourceExample.java" in the Spark repo.
数据源选项
文本的数据源选项可以通过以下方式设置:
-
的
.option
/<code class="language-plaintext high
属性名称 | 默认值 | 含义 | 范围 |
---|---|---|---|
wholetext
|
false
|
如果为真,则将输入路径中的每个文件作为一行读取。 | 读取 |
lineSep
|
\r
,
\r\n
,
\n
(用于读取),
\n
(用于写入)
|
定义在读取或写入时应使用的行分隔符。 | 读/写 |
compression
|
(无) | 保存到文件时使用的压缩编解码器。这可以是已知的不区分大小写的简短名称之一(none, bzip2, gzip, lz4, snappy 和 deflate)。 | 写入 |
其他通用选项可以在 Generic File Source Options 找到。