我有一个hdfs文件夹,在这个文件夹里有很多txt文件。我想用spark读取这些文件中的内容。
我的代码:
// Create spark session
val spark = SparkSession.builder()
.master("spark://master:7077")
.appName("Indexing data to elasticsearch")
.getOrCreate()
spark.sparkContext.setLogLevel("ERROR")
// Read folder file
val df:DataFrame = spark.read.text("hdfs://master:9000/user/file/shakespeare")
我想从dataframe获取文件夹中每个文件的内容。我该怎么办?
1条答案
按热度按时间b1zrtrql1#
这是RDD似乎比Dataframe更灵活的许多情况之一,因为RDD提供了wholetextfiles方法。
wholetextfiles方法基本上类似于textfile,但它不是读取所有文件中每行的输入,而是读取并存储每个文件的record/pairdd/key-value对。结果rdd的模式如下:
(但是,使用此方法时必须非常小心,因为您可能无法预测目录下文件内容的长度,因此这可能会导致内存不足)。
假设我们有很多文本文件(a.txt,b.txt,…),每一个文件都以字母命名,它们的内容如下所示:
使用wholetextfiles方法将产生以下rdd对(您可能希望将每个文件的完整路径作为每一对的密钥以获得更好的可读性):
使用此方法后,根据您的问题剩下的所有工作就是将结果rdd转换为dataframe,因为每个记录的数据将分为两列(由您命名):file\u name和content。
下面的代码片段可能会发生这种情况