Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中使用ApacheSpark在Dataset中用空字符串填充空值_Java_Apache Spark - Fatal编程技术网

在java中使用ApacheSpark在Dataset中用空字符串填充空值

在java中使用ApacheSpark在Dataset中用空字符串填充空值,java,apache-spark,Java,Apache Spark,请不要将此问题标记为重复问题。我已经检查了下面的问题,它给出了python或scala的解决方案。而对于java方法则不同。 我有一个数据集ds,它是我通过读取拼花地板文件创建的。因此,所有列值都是字符串。有些值为空。我使用.na.fill将空值替换为空字符串 Dataset<Row> ds1 = ds.na().fill(""); 但它并没有删除空值。我无法理解原因是什么 |-stopPrice:double nullable=true |-tradingCurrency:s

请不要将此问题标记为重复问题。我已经检查了下面的问题,它给出了python或scala的解决方案。而对于java方法则不同。

我有一个数据集ds,它是我通过读取拼花地板文件创建的。因此,所有列值都是字符串。有些值为空。我使用.na.fill将空值替换为空字符串

Dataset<Row>  ds1 = ds.na().fill("");
但它并没有删除空值。我无法理解原因是什么

|-stopPrice:double nullable=true
|-tradingCurrency:string nullable=true

在我看来,您的列具有数字类型。此外,您不能用Spark中的非法值替换空值。因此,在您的案例中,您不能在您的案例中使用字符串。以下是一个示例,说明了这一点:

数据集df=spark.range10 .selectcolid, 当incolid.mod2.equalTolit0时,为空 .otherwisecolid.caststring.asstring\u col, 当incolid.mod2.equalTolit0时,为空 .其他方式为Colid.asint_col; df.na.fill.show; 结果如下

+---+----------+-------+
| id|string_col|int_col|
+---+----------+-------+
|  0|          |   null|
|  1|         1|      1|
|  2|          |   null|
|  3|         3|      3|
|  4|          |   null|
|  5|         5|      5|
|  6|          |   null|
|  7|         7|      7|
|  8|          |   null|
|  9|         9|      9|
+---+----------+-------+

它适用于字符串,但不适用于整数。请注意,我使用cast函数将int转换为字符串并使代码正常工作。在您的情况下,这可能是一个很好的解决方法。

您能否提供一个CSV示例,其中包括它不起作用的行、您获得的输出以及您期望的输出?这将真正帮助我们了解问题所在。只是想让你知道,我尝试了你的代码,它工作正常。最有可能的是,你的值不是真的空,但我需要更多的信息来确定。只是更新了我的问题。我正在读两个文件,一个是拼花,一个是csv。两者都包含相似的数据。我将两者都存储到数据集。然后,我使用上面的代码将空值替换为空字符串。对于从csv创建的数据集,它正在工作;对于从拼花地板创建的数据集,它不工作。我尝试了数据集ds1=ds.na.fill0;它正在发挥作用。此填充方法是否取决于列的数据类型?如果是,那么我需要首先将此列转换为字符串。那会很混乱。有什么干净的方法吗?我已经开始用一个例子写答案了。不管怎样,我把它贴了出来,它可以帮助别人。关于下一个问题,当您使用spark.read.schema…csvxxx.CSV从CSV文件读取数据帧时,可以应用模式。但是,如果已经创建了dataframe,则需要强制转换相应的列。在您的例子中,您可能会读取拼花地板文件,用df.schema提取模式,并在解析CSV时使用它。