如何在没有withColumn的情况下将Spark数据集的所有列强制转换为Java中的字符串?
我已尝试使用此处指定的withColumn解决方案: 但是,该解决方案对大量列(1k-6k)的性能产生了影响。它需要6个多小时,然后被中止 或者,我尝试使用map进行如下转换,但我在这里遇到错误:如何在没有withColumn的情况下将Spark数据集的所有列强制转换为Java中的字符串?,java,apache-spark,casting,Java,Apache Spark,Casting,我已尝试使用此处指定的withColumn解决方案: 但是,该解决方案对大量列(1k-6k)的性能产生了影响。它需要6个多小时,然后被中止 或者,我尝试使用map进行如下转换,但我在这里遇到错误: MapFunction<Column, Column> mapFunction = (c) -> { return c.cast("string"); }; dataset = dataset.map(mapFunction, Encode
MapFunction<Column, Column> mapFunction = (c) -> {
return c.cast("string");
};
dataset = dataset.map(mapFunction, Encoders.bean(Column.class));
您确定是指1k-6k列还是指行 但在任何情况下,我通常都会这样投射列:
import spark.implicits._
val df = Seq((1, 2), (2, 3), (3, 4)).toDF("a", "b")
val cols = for {
a <- df.columns
} yield col(a).cast(StringType)
df.select(cols : _*)
导入spark.implicits_
val df=序列((1,2)、(2,3)、(3,4)).toDF(“a”、“b”)
val cols=用于{
a为任何寻求此解决方案的人找到了以下解决方案:
String[] strColNameArray = dataset.columns();
List<Column> colNames = new ArrayList<>();
for(String strColName : strColNameArray){
colNames.add(new Column(strColName).cast("string"));
}
dataset = dataset.select(JavaConversions.asScalaBuffer(colNames));`
String[]strColNameArray=dataset.columns();
List colNames=new ArrayList();
for(字符串strColName:strColNameArray){
添加(新列(strColName).cast(“字符串”);
}
dataset=dataset.select(JavaConversions.asScalaBuffer(colNames))`
谢谢Matt。但这是在Scala中。我需要Java的代码段。但我后来才弄明白。我使用了:String[]strColNameArray=dataset.columns();
List colNames=new ArrayList();
for(String strColName:strColNameArray){
colNames.add(new Column(strColName).cast(“String”));
}
dataset=dataset.select(JavaConversions.asScalaBuffer(colNames));
sry关于这一点,我似乎没有完全阅读您的问题无需担心!感谢您的帮助!
import spark.implicits._
val df = Seq((1, 2), (2, 3), (3, 4)).toDF("a", "b")
val cols = for {
a <- df.columns
} yield col(a).cast(StringType)
df.select(cols : _*)
String[] strColNameArray = dataset.columns();
List<Column> colNames = new ArrayList<>();
for(String strColName : strColNameArray){
colNames.add(new Column(strColName).cast("string"));
}
dataset = dataset.select(JavaConversions.asScalaBuffer(colNames));`