spark scala数据框中所有列的值都为空

Posted

技术标签:

【中文标题】spark scala数据框中所有列的值都为空【英文标题】:Values are coming null for all the columns in spark scala dataframe 【发布时间】:2020-12-21 06:41:26 【问题描述】:

我有以下数据集作为输入

816|27555832600|01|14|25|  |  
825|54100277425|14|03|25|15|  
9003|54100630574|  |  |  |  |  
809|51445926423|12|08|25|17|  

输出如下:

null|null|null|null|null|null|
825|54100277425|  14|   3|  25|  15|
null|null|null|null|null|null|
809|51445926423|  12|   8|  25|  17|

预期输出

816|27555832600|01|14|25|null|  
825|54100277425|14|03|25|15|  
9003|54100630574|null|null|null|null|  
809|51445926423|12|08|25|17|  

我已尝试使用以下代码加载 .txt 或 .bz2 文件。

val dataset = sparkSession.read.format(formatType)
        .option("DELIMITER", "|"))
        .schema(schema_new)
        .csv(dataFilePath)

【问题讨论】:

你试过的代码是什么.. val dataset = sparkSession.read.format("text) .option("DELIMITER", "|") .schema(schema_new) .csv(dataFilePath) 文件中可能有空行..删除它然后尝试 我应该使用 trim() right 删除空格 您提供的架构是什么。我的意思是你能提供你的 schema_new。 【参考方案1】:

我试过你的问题陈述。我正在使用 Spark 3.0.1 版本来解决这个用例。它按预期工作。试试下面的代码 sn-p。

val sampleDS = spark.read.options(Map("DELIMITER"->"|")).csv("D:\\DataAnalysis\\DataSample.csv")
sampleDS.show()

Output ->
+----+-----------+---+---+---+---+---+
| _c0|        _c1|_c2|_c3|_c4|_c5|_c6|
+----+-----------+---+---+---+---+---+
| 816|27555832600| 01| 14| 25|   |   |
| 825|54100277425| 14| 03| 25| 15|   |
|9003|54100630574|   |   |   |   |   |
| 809|51445926423| 12| 08| 25| 17|   |
+----+-----------+---+---+---+---+---+

考虑输入数据中是否有空行。

添加空行后输入数据

816|27555832600|01|14|25|  |  
825|54100277425|14|03|25|15|  
9003|54100630574|  |  |  |  |  
||||
809|51445926423|12|08|25|17| 

读取数据后,您可以简单地使用sampleDS.na.drop.show() 删除空白或空数据。

请注意,如果您只有空行,则 Spark 不会在数据帧中考虑。 Spark 在读取自身时删除空白行。

【讨论】:

我的文件是 .txt 格式的,我不能按照你说的构建模式。 我的语法有误。目前我正在尝试下面的代码。 val dataset = sparkSession.read.format(formatType) .option("DELIMITER", "|") .schema(schema_new) .csv(dataFilePath) 错误已消失,但输出相同..full 行改为 null 我的数据中没有任何空行。我有几列没有任何值(仅包含 2 个空格),并且在输出的整行中为空。 请 Spark,Scala 版本详细信息

以上是关于spark scala数据框中所有列的值都为空的主要内容,如果未能解决你的问题,请参考以下文章

excel转化为table(去掉所有列值都为空的值一行,即返回有效值的DataTable)

PHP/MySQL:导入 CSV,所有日期和十进制值都为空,零

如果 spark 数据框的特定列中的所有条目都为空,则删除

带有架构的 pyspark.sql SparkSession load() :架构中的非字符串类型字段使所有值都为空

scala.MatchError:某个时间点之后的所有请求都为空

我可以更改 Spark 数据框中列的可空性吗?