当前位置: 首页 > 知识库问答 >
问题:

Spark 2.4 CSV负载问题,选项为“nullvalue”

金赤岩
2023-03-14

我们以前使用过Spark 2.3,现在使用的是2.4:

Spark version 2.4.0
Using Scala version 2.11.12 (OpenJDK 64-Bit Server VM, Java 1.8.0_212)

我们在生产中运行了一段代码,将csv文件转换为拼花格式。我们设置csv加载的选项之一是option(“nullValue”,null)。spark 2.4中的工作方式有问题。

这里有一个例子来说明这个问题。

  1. 让我们创建以下/tmp/test。csv文件:
C0,C1,C2,C3,C4,C5
1,"1234",0.00,"","D",0.00
2,"",0.00,"","D",0.00

scala> val data1 = spark.read.option("header", "true").option("inferSchema", "true").option("treatEmptyValuesAsNulls","true").option("nullValue", null).csv("file:///tmp/test.csv")

we get an empty row:
scala> data1.show
+----+----+----+----+----+----+
| C0| C1| C2| C3| C4| C5|
+----+----+----+----+----+----+
| 1|1234| 0.0| | D| 0.0|
|null|null|null|null|null|null|
+----+----+----+----+----+----+

C0,C1,C2,C3,C4,C5
1,"1234",0.00,"","D",0.00
2,"",0.00,"1","D",0.00

结果更糟:

scala> val data2 = spark.read.option("header", "true").option("inferSchema", "true").option("treatEmptyValuesAsNulls","true").option("nullValue", null).csv("file:///tmp/test.csv")

scala> data2.show
+----+----+----+----+----+----+
| C0| C1| C2| C3| C4| C5|
+----+----+----+----+----+----+
|null|null|null|null|null|null|
|null|null|null|null|null|null|
+----+----+----+----+----+----+

这是新版Spark 2.4.0中的错误吗?任何机构都面临类似的问题吗?

共有1个答案

郜驰
2023-03-14

Spark选项emptyValue解决了问题

val data2 = spark.read.option("header", "true").option("inferSchema", "true").option("treatEmptyValuesAsNulls","true").option("nullValue", null)***.option("emptyValue", null)***.csv("file:///tmp/test.csv")
 类似资料:
  • 问题内容: 我编写了使用文本协议接受连接和轰炸消息(〜100字节)的服务器,并且我的实现能够与3rt客户端发送约400K / sec的回送消息。我为此任务选择了Netty,即SUSE 11 RealTime,JRockit RTS。但是,当我开始基于Netty开发自己的客户端时,吞吐量却急剧下降(从400K msg / sec降低到1.3K msg / sec)。客户端的代码非常简单。能否请您提供

  • 我试图为我们的服务器安装负载平衡器。如果使用http,它可以正常工作。但是当我切换到https时 我在浏览器控制台中遇到以下错误: 混合内容:页面位于'https://www.something.com/'通过HTTPS加载,但请求了一个不安全的脚本'…mootools.js'。此请求已被阻止;内容必须通过HTTPS提供 我想我做了一些硬代码,比如“http://www.something.com

  • 我有一个表单,它的大部分工作都很好。但有一件事让我感到困扰,那就是用来推断一个人状态的选择项(见下面的截图)。使用鼠标可以很好地工作,但是如果您在表单中跳转并tab到State字段,然后键入一个状态,如“CA”代表加利福尼亚,然后tab到下一个字段(zipcode),则State字段将重置为空白。如果它与选择器的选项之一匹配,我希望它保持用CA填充。 如果我键入“CA”并点击enter进入下一个字

  • 在花费大量时间配置和尝试大量解决方案使Artemis在集群模式下工作之后,就像发布-订阅(主题)中的本地模式一样。因此,我在不同的节点上准备了3个消费者和一个只在一个节点上发布消息的生产者。我希望3个消费者收到他们自己的消息副本,如在这里所描述的! 问题是集群(核心桥)仍然在3个节点之间循环消息。 我的项目Github回购 spring-boot-artemis-clustered-topic 代

  • 问题内容: 我有一个小问题。我有一个选择是情节的。我希望能够传递类似的数字。但是,这不起作用-解释这是一个位置参数。如果我这样做了,请执行以下操作:将其读取为负数。是否可以阅读? 下面的代码,和我将如何运行它的一个示例是: 如果我执行以下操作,则可以: 编码: 尽管我可以使它以这种方式工作,但我确实更希望能够使用科学计数法。谁有想法? 干杯 问题答案: 正如评论所指出的那样,问题在于前缀被解析为选

  • 我们在库伯内特斯运行了Spring Boot服务,并且正在使用Spring Cloud库伯内特斯负载均衡器功能和RestTemboard来调用其他Spring Boot服务。我们这样做的主要原因之一是历史上的——因为之前我们使用Eureka在EC2中运行我们的服务进行服务发现,迁移后我们保持了Spring发现客户端/客户端负载平衡(更新依赖项等,以便它与Spring Cloud库伯内特斯项目一起工