【发布时间】:2019-05-06 13:04:48
【问题描述】:
请不要将此问题标记为重复。我检查了以下问题,它为 python 或 scala 提供了解决方案。而对于java的方法就不同了。 How to replace null values with a specific value in Dataframe using spark in Java?
我有一个数据集Dataset<Row> ds,它是通过读取镶木地板文件创建的。因此,所有列值都是字符串。一些值为空。我正在使用 .na().fill("") 用空字符串替换空值
Dataset<Row> ds1 = ds.na().fill("");
但它不会删除空值。我无法理解可能是什么原因。
|-- stopPrice: double (nullable = true) |-- tradingCurrency: string (nullable = true)
【问题讨论】:
-
您能否提供您的 CSV 样本(“它不工作”的行)、您获得的输出以及您期望的输出?这真的可以帮助我们了解问题所在。
-
只是让您知道,我尝试了您的代码并且它有效。很可能,您的值并不是真的为空,但我需要更多信息才能确定。
-
刚刚更新了我的问题。我正在阅读两个文件,一个是镶木地板,一个是 csv。两者都包含相似的数据。我将两者都存储到数据集(Dataset
)。然后我使用上面的代码用空字符串替换空值。对于从 csv 创建的数据集,它正在工作,对于从 parquet 创建的数据集,它不工作
-
我试过 Dataset
ds1 = ds.na().fill(0);它正在工作。此填充方法是否取决于列的数据类型?如果是,那么我需要先将此列转换为字符串。那会很乱。有什么干净的方法吗?
-
我已经开始用一个例子写一个答案。无论如何,我发布了它,它可以帮助其他人。关于您的下一个问题,您可以在使用
spark.read.schema(...).csv("xxx.csv")从 CSV 文件中读取数据框时应用架构。但是,如果数据框已经创建,则需要转换相应的列。在您的情况下,您可能可以读取 parquet 文件,使用df.schema()提取架构并在解析 CSV 时使用它。
标签: java apache-spark