标签: univocity

Univocity - 如何使用迭代器样式每行返回一个bean?

介绍

我正在构建一个合并几个大型排序的csv文件的进程.我目前正在研究使用Univocity来做到这一点.我设置合并的方法是使用实​​现类似接口的bean.

特定

简化文件如下所示:

id,data
1,aa
2,bb
3,cc
Run Code Online (Sandbox Code Playgroud)

bean看起来像这样(getter和setters ommited):

public class Address implements Comparable<Address> {

    @Parsed
    private int id;
    @Parsed
    private String data;        

    @Override
    public int compareTo(Address o) {
        return Integer.compare(this.getId(), o.getId());
    }
}
Run Code Online (Sandbox Code Playgroud)

比较器如下所示:

public class AddressComparator implements Comparator<Address>{

    @Override
    public int compare(Address a, Address b) {
        if (a == null)
            throw new IllegalArgumentException("argument object a cannot be null");
        if (b == null)
            throw new IllegalArgumentException("argument object b cannot be null");
        return Integer.compare(a.getId(), b.getId());
    }
}
Run Code Online (Sandbox Code Playgroud)

由于我不想读取内存中的所有数据,我想读取每个文件的顶级记录并执行一些比较逻辑.这是我的简化示例:

public …
Run Code Online (Sandbox Code Playgroud)

java iteration univocity

5
推荐指数
1
解决办法
1584
查看次数

一旦发生错误,csv到bean对象的UNIVOCITY-PARSERS就会停止

我正在使用UNIVOCITY-PARSERS将csv文件行转换为java对象.

在处理文件时,如果它遇到行中任何列的任何问题,那么它解析在该行中停止并抛出异常.但我需要一些东西,只要跳过有错误的行,就会一直持续到文件结尾.但我没有api中的任何实用程序类.

我的豆类

public class ItemcodeBean {

@Trim
@NullString(nulls = { " ", "" }) 
@Parsed(field = "ItemCode")
 private String itemCode;

@Trim 
@NullString(nulls = { " ", "" })
@Parsed(field = "PartNumber") 
private String partNumber;

@Trim 
@NullString(nulls = { " ", "" }) 
@Parsed(field = "ModelNumber") 
private String modelNumber;

}
Run Code Online (Sandbox Code Playgroud)

我的主要课程

公共类TestClass {

private  BeanListProcessor<ItemcodeBean>
        rowProcessor = null;
private CsvParser parser = null;
public static void main(String[] args) {
    TestClass testClass = new TestClass();
    testClass.init();
    try{
        ItemcodeBean itemcodeBean;
        while ((itemcodeBean …
Run Code Online (Sandbox Code Playgroud)

java csv parsing univocity

5
推荐指数
1
解决办法
984
查看次数

Univocity - 如何动态提供日期格式

我正在尝试使用 univocity 解析器验证项目中的日期字段。

我知道 univocity 中有自定义验证器和格式注释。但我们需要在实现 bean 类时提供静态日期格式。

@Format(formats = "yyyy-MM-dd")
private Date createdAt
Run Code Online (Sandbox Code Playgroud)

我有一个具体要求,我需要动态提供日期格式。这意味着我需要将日期字段解析为字符串,然后在解析 csv 文件(一种后验证器)后根据 DateTimeFormatter 验证它们。

有没有办法在运行时提供传递验证参数?或者 univocity 是否支持在创建后处理所有 bean 的验证程序?

谢谢!

java validation univocity

5
推荐指数
1
解决办法
610
查看次数

Java映射类和列表到通用类型

我正在尝试创建一个接受类作为参数并执行一些操作并返回相同类的列表的方法.

我正在尝试使用泛型并具有以下代码.

问题: 如何将提供的类映射到BeanListProcessor类型和List?

注意:此代码不正确,将产生语法错误.这是一种解释我的要求的模板.

public static List<?> process(Class<?> bean) {

    List<?> rows = new ArrayList<>();

    BeanListProcessor<bean> processor = new BeanListProcessor<bean>(bean.getClass());

    ....
    return rows;
}
Run Code Online (Sandbox Code Playgroud)

java univocity

3
推荐指数
1
解决办法
189
查看次数

加载 csv 文件时获取 com.univocity.parsers.common.TextParsingException

我正在尝试将数据中有很多新行的 tsv 数据集加入另一个数据帧并继续获取

com.univocity.parsers.common.TextParsingException

我已经清理了我的数据以用 NA 替换 \N,因为我认为这可能是原因但没有成功。

该错误将我指向错误数据中的以下记录

tt0100054 2 ?????????? ???SUHH RU NA NA 0

堆栈跟踪如下

    19/03/02 17:45:42 ERROR Executor: Exception in task 0.0 in stage 10.0 (TID 10)
com.univocity.parsers.common.TextParsingException: Length of parsed input (1000001) exceeds the maximum number of characters defined in your parser settings (1000000). 
Identified line separator characters in the parsed content. This may be the cause of the error. The line separator in your parser settings is set to '\n'. Parsed content:
    Sesso e …
Run Code Online (Sandbox Code Playgroud)

parsing apache-spark apache-spark-sql univocity

0
推荐指数
1
解决办法
2259
查看次数