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);