JavaSparkContext.wholetext文件的数据集API模拟

JavaSparkContext.wholetext文件的数据集API模拟,java,apache-spark,dataset,rdd,Java,Apache Spark,Dataset,Rdd,我们可以调用JavaSparkContext.wholeTextFiles并获取javapairdd,其中第一个字符串是文件名,第二个字符串是整个文件内容。Dataset API中是否有类似的方法,或者我所能做的就是将文件加载到javapairdd中,然后转换为Dataset(它正在工作,但我正在寻找非RDD解决方案)。如果您想使用Dataset API,那么您可以使用spark.read.text(“path/to/files/”。请查看API详细信息。请注意,使用text()方法返回数据帧,

我们可以调用
JavaSparkContext.wholeTextFiles
并获取
javapairdd
,其中第一个字符串是文件名,第二个字符串是整个文件内容。Dataset API中是否有类似的方法,或者我所能做的就是将文件加载到
javapairdd
中,然后转换为Dataset(它正在工作,但我正在寻找非RDD解决方案)。

如果您想使用Dataset API,那么您可以使用
spark.read.text(“path/to/files/”
。请查看API详细信息。请注意,使用
text()
方法返回数据帧,其中“文本文件中的每一行都是结果数据帧中的新行”。所以
text()
方法将提供文件内容。要获取文件名,必须使用
input\u file\u name()
函数

import static org.apache.spark.sql.functions.input_file_name;
Dataset<Row> ds = spark.read().text("c:\\temp").withColumnRenamed("value", "content").withColumn("fileName", input_file_name());
ds.show(false);

阿巴格尔,谢谢你!还有一个问题-在
Dataset
中如何使用
JavaRDD.map
做什么?例如,在
JavaRDD
中,我可以通过不属于
JavaRDD
的某个集合/映射来过滤数组的成员,该数组是
JavaRDD
的元素。或者我可以用map中的value foind替换javapairdd字段。一般来说,在
map/mapToPair
方法中,我可以做任何事情,涉及应用程序中的任何对象<代码>数据集似乎仅限于类似SQL的API。数据集中还有映射和筛选函数。请在查看API。请发布一个单独的问题,详细说明您对数据集的问题。
import static org.apache.spark.sql.functions.col;
import static org.apache.spark.sql.functions.concat_ws;
import static org.apache.spark.sql.functions.collect_list;
ds = ds.groupBy(col("fileName")).agg(concat_ws("",collect_list(ds.col("content"))).as("content"));
ds.show(false);