如何在写入 Java 中的镶木地板之前为 DataSet 列添加别名

我在 java 中使用 apache spark,我想做的是过滤一些数据,按特定键对其进行分组,然后计算每个键的元素数量。目前我正在这样做:


Dataset<MyBean> rawEvents = readData(spark);

        Dataset<MyBean> filtered = rawEvents.filter((FilterFunction<MyBean>) events ->

                //filter function  

            ));


KeyValueGroupedDataset<String, MyBean> grouped = filtered

                .groupByKey((MapFunction<MyBean, String>) event -> {

                   return event.getKey();

                }, Encoders.STRING());



grouped.count().write().parquet("output.parquet");

它无法写入,因为:org.apache.spark.sql.AnalysisException: Attribute name "count(1)" contains invalid character(s) among " ,;{}()\n\t=". Please use alias to rename it.;


我怎样才能为计数列起别名,以免发生这种情况?


千万里不及你
浏览 115回答 2
2回答

明月笑刀无情

grouped.count()Dataset<Tuple2<String, Object>在你的情况下返回 a 。本质上,重命名Dataset对象中的列将解决您的问题。您可以使用DatasetwithColumnRenamed&nbsp;API的方法。grouped.count().withColumnRenamed("count(1)",&nbsp;"counts").write().parquet("output.parquet")

吃鸡游戏

grouped.count()选择所有列并添加to count 列后alias,使用 write 方法。例子:import static org.apache.spark.sql.functions.col;import org.apache.spark.sql.Column;Column[] colList =&nbsp; { col("column1"), col("column2"), col("count(1)").alias("count") };grouped.count().select(colList).write.parquet("output.parquet");
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java