我有一个这样的数据集:
结果categoricF1 categoricF2 categoricF3
N红苹果
P绿b香蕉
....
然后我将每列中的每个元素转换为位表示形式
例如:红色将是10000,绿色将是01000,然后将10000存储在BigInteger数组中。我将对数据集中的每个元素执行相同的过程
这种情况下加载数据的最佳方法是什么? (数据帧,数据集,RDD)
我需要Java代码。的确感谢您的帮助
最佳答案
Spark数据集与RDD相似,但是,它们不使用Java序列化或Kryo,而是使用专用的Encoder对对象进行序列化以进行网络处理或传输。虽然编码器和标准序列化都负责将对象转换为字节,但是编码器是动态生成的代码,并使用一种格式,该格式允许Spark执行许多操作,例如过滤,排序和哈希处理,而无需将字节反序列化为对象。
例如,您有一个ClassName
类,其中包含数据中所需的所有参数。
import java.io.Serializable;
public class ClassName implements Serializable {
private String result;
private String categoricF1;
private String categoricF2;
private String categoricF3;
public String getResult() {
return result;
}
public String getCategoricF1() {
return categoricF1;
}
public String getCategoricF2() {
return categoricF2;
}
public String getCategoricF3() {
return categoricF3;
}
public void setResult(String result) {
this.result = result;
}
public void setCategoricF1(String categoricF1) {
this.categoricF1 = categoricF1;
}
public void setCategoricF2(String categoricF2) {
this.categoricF2 = categoricF2;
}
public void setCategoricF3(String categoricF3) {
this.categoricF3 = categoricF3;
}
}
然后,创建所需数据的数据集,您可以像这样进行编码:
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Encoder;
import org.apache.spark.sql.Encoders;
import org.apache.spark.sql.SparkSession;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
SparkSession spark = SparkSession
.builder()
.appName("Java Spark SQL basic example")
.master("local")
.getOrCreate();
// Create an instance of a Bean class
ClassName elem1 = new ClassName();
elem1.setResult("N");
elem1.setCategoricF1("red");
elem1.setCategoricF2("a");
elem1.setCategoricF3("apple");
ClassName elem2 = new ClassName();
elem2.setResult("P");
elem2.setCategoricF1("green");
elem2.setCategoricF2("b");
elem2.setCategoricF3("banana");
List<ClassName> obj = new ArrayList<>();
obj.add(elem1);
obj.add(elem2);
// Encoders are created for Java beans
Encoder<ClassName> classNameEncoder = Encoders.bean(ClassName.class);
Dataset<ClassName> javaBeanDS = spark.createDataset(obj, personEncoder);
javaBeanDS.show();
}
}
关于java - 激发以Java语言加载数据集的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43878602/