java - Flink Java API - Pojo 类型到元组数据类型
问题描述
我正在 JAVA flink API 上创建一个小实用程序来学习功能。我正在尝试读取 csv 文件并打印它,并且我已经为数据结构开发了一个 POJO 类。当我执行代码时,我看不到正确的值。(整数值被零和字符串的空值替换。如何映射属性的数据类型
我的主要课程:
package org.karthick.flinkLab;
import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import javax.xml.crypto.Data;
public class CSVFileRead {
public static void main(String[] args) throws Exception {
System.out.println("--CSV File Reader using Flink's Data Set API--");
ExecutionEnvironment execEnv = ExecutionEnvironment.getExecutionEnvironment();
DataSet<DataModel> csvInput = execEnv.readCsvFile("C:\\Flink\\Data\\IndividualDetails.csv")
.pojoType(DataModel.class);
csvInput.print();
}
}
我的 Pojo 类 (DataModel.class)
package org.karthick.flinkLab;
import org.apache.flink.api.java.tuple.Tuple;
import org.apache.flink.api.java.tuple.Tuple12;
import java.io.Serializable;
import java.util.Date;
public class DataModel<T extends Tuple>
extends Tuple12<Integer,String,Date,Integer,String,String,String,String,String,String,Date,String>
implements Serializable
{
public Integer id;
public String government_id;
public Date diagnosed_date;
public Integer age;
public String detected_city;
public String detected_district;
public String detected_state;
public String nationality;
public String current_status;
public Date status_change_date;
public String notes;
public DataModel() {};
public String getNotes() {
return notes;
}
public Date getStatus_change_date() {
return status_change_date;
}
public String getCurrent_status() {
return current_status;
}
public String getNationality() {
return nationality;
}
public String getDetected_state() {
return detected_state;
}
public String getDetected_district() {
return detected_district;
}
public String getDetected_city() {
return detected_city;
}
public String gender ;
public Date getDiagnosed_date() {
return diagnosed_date;
}
public String getGender() {
return gender;
}
public Integer getAge() {
return age;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getGovernment_id() {
return government_id;
}
public void setGovernment_id(String government_id) {
this.government_id = government_id;
}
}
当我执行 main 方法时,我看不到正确的值。样本结果
(0,,Tue May 19 16:50:38 IST 2020,0,,,,,,,Tue May 19 16:50:38 IST 2020,)
正如我所期望的那样
(2777,AP,Tue May 19 16:50:38 IST 2020,0,A,B,C,D,E,F,Tue May 19 16:50:38 IST 2020,G)
这里可能缺少什么?
解决方案
您缺少从 CSV 到 POJO 的列映射。添加映射将起作用。列名的映射必须遵循以下两条规则:
- 列名应该与 POJO 中的名称完全相同。
- 映射中列的顺序应与 CSV 文件中的完全相同。
您可以按如下方式定义映射:
DataSet<DataModel> csvInput = execEnv.readCsvFile("C:\\Flink\\Data\\IndividualDetails.csv")
.pojoType(DataModel.class, "id", "age",.........);
它应该抛出错误,但它没有。这可能是一个错误
推荐阅读
- django - Django 2.0 - 通过预取相关属性上的字段对查询集进行排序
- python - 从一个函数返回所有可能的输出,然后在另一个函数中使用它
- javascript - 如何在 TypeScript 中为 NULL 属性设置默认值
- python - python - 如何使用for循环重新分配数组中的元素
- c# - Xamarin 在 IOS 问题中形成 Linker
- string - PowerShell 无法删除文本和字符串之间的空格
- android - 我的片段缓存了数据并且不刷新
- c# - Windows Server 2012 HttpWebRequest 连接关闭错误
- javascript - 单击后退箭头在 JavaScript 中无法正常工作
- c# - 如何强制为空值调用 JsonConverter.WriteJson()