问题标签 [univocity]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
554 浏览

java - Univocity - 解析 CSV 时检测缺失的列

我正在使用 Univocity 库来解析 CSV,它运行良好,但我需要一种方法来检测正在解析的文件的列是否少于所需的列

例如,如果我期待一个 3 列文件,列映射到 [H1,H2,H3] 那么我收到一个文件(没有标题),看起来像

使用时

这将返回null,相反,我需要这个文件要么无法解析,要么我可以检查它是否遗漏了一列并停止处理它

有什么办法可以做到这一点?

0 投票
1 回答
183 浏览

scala - Spark Univocity 解析器 - LineSeparatorDetection 不起作用

我正在尝试使用具有以下选项的 univocity csv 解析器来解析此csv 文件

选项 :

该文件有 30 列,但是当我解析它时显示为 2302 行。

该文件有 \r 作为行分隔符。(正如我在解析时看到的那样)

将行分隔符显式设置为 \r 可解决此问题。但我也会将文件以 \n 作为分隔符替换为 \r。要解决此设置,将setNormalizedLineEndingWithinQuotes(false)解析 ,但在引用所有值的其他文件中失败。(再次无法检测到分隔符)。

任何可能的解决方法?

0 投票
2 回答
954 浏览

apache-spark - Univocity CSV Parser setDelimiter 方法的 Spark java.lang.NoSuchMethodError

我正在尝试运行使用 Univocity CSV Parser 的 Scala Spark 作业,并且在升级以支持字符串分隔符(与仅字符)之后,当我在集群中运行我的 jar 时出现以下错误。在我的 IDEA IDE 中本地运行它会产生没有错误的预期结果。

我尝试了以下方法:通过检查依赖关系树消除了所有冲突的单义性解析器: mvn dependency:tree -Dverbose -Dincludes=com.univocity:univocity-parsers 产生:

我还尝试在运行 spark 作业时设置 spark.executor.userClassPathFirst=true 配置,但行为没有变化。

这是我的 pom.xml 中的依赖项部分:

我想知道 Spark 是否具有覆盖我的版本的内置依赖项(2.8 是第一个支持字符串参数的版本。以前,它只支持字符)。

有什么见解吗?

0 投票
1 回答
65 浏览

java - 为什么我需要结合 BeanListProcessor 调用 parseLine 两次

我正在使用 Univocity (2.8.2) 解析器逐行解析 CSV。它迫使我调用 parseLine("") 两次来设置标题。

我尝试在 CSVParserSettings 上设置标题。

当我省略第二个“parser.parseLine("name,age")”语句时,这会导致奇怪的行为。

正如您从测试中看到的那样,我调用了两次“parser.parseLine("name,age")"。如果我不这样做,解析器不会填充 bean。

0 投票
1 回答
140 浏览

java - Univocity - 如何在“格式自动检测”上定义分隔符的偏好顺序?

我正在尝试使用 Univocity格式自动检测来解析此 CSV 表:

如您所见,逗号 ',' 和空格 ' ' 的数量相同。问题是用于查找分隔符的启发式算法优先使用 ' ' 而不是 ',' 字符。

所以在这种情况下,检测到的分隔符是空格''。然后,单元格的值是错误的,因为逗号被视为值的一部分:

我看到有一个功能setDelimiterDetectionEnabled用于按优先级顺序定义分隔符,但我无法使其工作。

我像这样使用它:setDelimiterDetectionEnabled(true, ',', ' '),但仍然选择空格作为分隔符。

如果我在 CSV 表中删除 1 个空格(因此逗号会多于空格),则选择逗号作为分隔符。

这是代码,是scala,但我认为这无关紧要,因为该库是用java编写的:

我希望有 format.getDelimiter 逗号',',但实际分隔符是空格''

0 投票
1 回答
468 浏览

java - 将 Univocity 解析器与 Spring Batch 一起使用

我正在尝试在 Spring Batch 中使用 Univocity Parsers。我面临的问题是如何整合它们。

Spring Batch Chunk Steps 遵循给定文件每一行的流程: 我需要在 ItemReader 中使用Univocity。它对输入文件(即 CSV 文件)的每一行执行该方法。我唯一做的就是使用 a来读取项目并将其直接转换为我的 Java 对象,返回一个已解析的 Bean,但我不想一次加载所有记录,以避免异常。我没有找到其他可以帮助我的东西。 我曾尝试使用答案作为示例,但无法弄清楚一次返回一个项目的任何内容。
在此处输入图像描述
read()BeanListProcessorListOutOfMemory



如何在我的 ItemReader 中使用 Univocity 一次读取一行,仍然使用 BeanProcessor 将我的行自动解析为我的 Java 对象?

0 投票
2 回答
510 浏览

csv - 递归对象写入平面 csv 文件

我需要写这样的对象

棘手的想法是 csv 写入应该通过对象树递归地工作。还需要将 LocalDate 写为像 2019-11-05 fe 这样的字符串;

生成的 csv 文件应该是扁平的,如下所示:

user.id,user.name,user.role.name,user.role.activeFrom,user.role.owner.name

// 示例值


我已经尝试过 OpenCsv:

和 Univocity 解析器:

到目前为止没有运气。它们只能序列化为 csv 顶级对象。同样在 OpenCsv 中,我在序列化 LocalDate 时遇到了问题。你能帮助我吗?建议方法或图书馆?

0 投票
1 回答
244 浏览

spring - 如何使用spring-batch将univocity返回的项目列表写入数据库

我有一系列步骤,其中包括:

  • 第 1 步:从数据库读取并写入 csv(第一站)
  • 步骤 2:从数据库读取并写入 csv(第二站)
  • Step3:将 spring-batch 与 Univocity 集成以比较第一站和第二站的 CSV
  • Step4:比较后返回匹配项列表
  • Step5:将列表写入数据库
  • Step6:从数据库读取到csv

我被困在第5步。我不知道如何使用 spring-batch 直接从列表写入数据库。

我曾尝试使用 jdbc batchUpdate,但遇到“连接关闭”问题。

这是我的 RestController 类:第一个作业“作业”处理步骤 1-4。第二个调用(readFromPtrxList())将列表中的项目插入数据库,而第二个作业“pjob”从数据库读取并写入 csv 文件:

这是执行步骤 5 时的错误消息:

0 投票
0 回答
97 浏览

java - 当我更改 java 类中字段的数据类型时,为什么我的 Univocity 解析器会变慢?

我对这个工具的体验大约有 3 天。一切都很顺利,我有一个包含 3 个记录定义(标题、数据、预告片)的文件,并且正在使用带有 3 个 beanListProcessors 的 InputValueSwitch。

数据对象有大约 40 个属性,除了 1 之外都是字符串,出生日期定义为带有 @Format 注释的日期。将 patientDateOfBirth 定义为 Date 我可以在几秒钟内处理 34K 行,这是非常可以接受的。

但是,如果我将数据类型从 Date 更改为 String,对于相同的 34K 行,处理时间会增加到大约 5 分钟,这对我来说没有意义。这会为任何人敲响警钟吗?

0 投票
0 回答
68 浏览

apache-camel - 如何在骆驼单义性固定解析器中允许更短的行?

我有这样的文件

我在 UniVocityFixedWidthDataFormat 上设置了两个标题,名称为 num1 和 num2,长度为 5 和 3。解析器能够轻松读取前两行,但它在第三行抛出空指针异常。我怎样才能告诉我的解析器也读取较短的行。

这是堆栈跟踪