读取文件数据
可以使用文件路径查询云对象存储或文件卷中的结构化、半结构化和非结构化的数据。
读取结构化和半结构数据
下面示例从文件卷中读取parquet, orc, json, csv, avro 和文本数据:
# parquet格式
df = spark.read.parquet("@<database_name>/<volume_name>/path/to/data")
# orc格式
df = spark.read.orc("@<database_name>/<volume_name>/path/to/data")
# json格式
df = spark.read.json("@<database_name>/<volume_name>/path/to/data")
# csv格式
df = spark.read.csv("@<database_name>/<volume_name>/path/to/data")
# avro格式
df = spark.read.format("avro").load("@<database_name>/<volume_name>/path/to/data")
# 文本格式
df = spark.read.text("@<database_name>/<volume_name>/path/to/data")
读取和处理文件卷数据
您可以使用 spark.volumes.readFiles 通过自定义读文件方法来批量读取和处理文件卷中的数据。
自定义读文件方法的输入参数是本地文件路径,输出是指定对象的迭代器 Iterator[T],如下创建一个读文本文件的方法:
val readTextFile: String => Iterator[String] = (filePath: String) => {
val fileReader = new FileReader(filePath)
val bufferedReader = new BufferedReader(fileReader)
var line: String = null
val lines = new java.util.LinkedList[String]()
line = bufferedReader.readLine()
while (line != null) {
lines.add(line)
line = bufferedReader.readLine()
}
bufferedReader.close()
lines.iterator().asScala
}
使用上面创建的 readTextFile 方法,从 student 文件卷中读取数据, 返回 RDD[T]:
val data = spark.volumes.readFiles[String]("student", readTextFile)
关于 readFiles 的使用请参阅:
获取文件卷中的文件列表
您可以使用 spark.volumes.listFiles 来列举指定文件卷的文件对象。
val files = spark.volumes.listFiles("student")
返回的 files 类型 dataframe, 包含了指定文件卷中存储的所有文件的元信息,包含文件路径,源文件路径,文件大小,文件数据行数,文件提交时间等。
关于 listFiles 的使用请参阅: