Scala 更新spark shell中的数据集,方法是将一个元素拆分为多个部分,并为每个部分插入一行

Scala 更新spark shell中的数据集,方法是将一个元素拆分为多个部分,并为每个部分插入一行,scala,apache-spark,spark-dataframe,amazon-emr,apache-spark-dataset,Scala,Apache Spark,Spark Dataframe,Amazon Emr,Apache Spark Dataset,我有一个将数据存储到数据集中的用例。我有一个列,在该列中,我可以在一行中用管道(|)分隔多个值。因此,一个典型的行如下所示: 2016/01/01 1/XYZ PQR M|N|O 我希望将此行转换为3行,如下所示: 2016/01/01 1/XYZ PQR M 2016/01/01 1/XYZ PQR N 2016/01/01 1/XYZ PQR O 此外,并非最后一列中的所有内容都可能包含管道(|)。某些行可以作为上述行之一。我试图用管道(|)拆分相关列,但由于行

我有一个将数据存储到数据集中的用例。我有一个列,在该列中,我可以在一行中用管道(|)分隔多个值。因此,一个典型的行如下所示:

2016/01/01  1/XYZ   PQR M|N|O 
我希望将此行转换为3行,如下所示:

2016/01/01  1/XYZ   PQR M
2016/01/01  1/XYZ   PQR N
2016/01/01  1/XYZ   PQR O
此外,并非最后一列中的所有内容都可能包含管道(|)。某些行可以作为上述行之一。我试图用管道(|)拆分相关列,但由于行中不包含管道(|),因此出现了错误。我想不出任何进一步的解决办法


使用scala中的spark shell实现这一点的最佳方法是什么。

对于您的用例,您必须同时使用
split
explode
(如@Pushkr所述)

此处
df
是包含2016/01/01 1/XYZ PQR M|N|O数据的数据框。此外,要按任何分隔符分割,您必须根据需要构建模式。就像上面的代码一样,我使用
[|::]+
模式将字符串拆分为

例如:

2016/01/01,1/XYZ,PQR,M|N|O
2016/02/02,2/ABC,DEF,P:Q:R
将导致:

+-----------+------+----+----+
|       col1|  col2|col3|col4|
+-----------+------+----+----+
|2016/01/01 |1/XYZ |PQR |  M |
|2016/01/01 |1/XYZ |PQR |  N |
|2016/01/01 |1/XYZ |PQR |  O |
|2016/02/02 |2/ABC |DEF |  P |
|2016/02/02 |2/ABC |DEF |  Q |
|2016/02/02 |2/ABC |DEF |  R |
+-----------+------+----+----+

我希望这有帮助

对于您的用例,您必须同时使用
split
explode
(如@Pushkr所述)

此处
df
是包含2016/01/01 1/XYZ PQR M|N|O数据的数据框。此外,要按任何分隔符分割,您必须根据需要构建模式。就像上面的代码一样,我使用
[|::]+
模式将字符串拆分为

例如:

2016/01/01,1/XYZ,PQR,M|N|O
2016/02/02,2/ABC,DEF,P:Q:R
将导致:

+-----------+------+----+----+
|       col1|  col2|col3|col4|
+-----------+------+----+----+
|2016/01/01 |1/XYZ |PQR |  M |
|2016/01/01 |1/XYZ |PQR |  N |
|2016/01/01 |1/XYZ |PQR |  O |
|2016/02/02 |2/ABC |DEF |  P |
|2016/02/02 |2/ABC |DEF |  Q |
|2016/02/02 |2/ABC |DEF |  R |
+-----------+------+----+----+

我希望这有帮助

您需要的是
explode
功能。您需要的是
explode
功能。谢谢。这很有帮助。我现在有一个新问题。假设对于新创建的行,我希望保留一个列具有特定值,其他列具有其他值。在结果图中,假设col3是值为10的整数。因此,在这三行中,首先我希望第1行的col3为10,第2行和第3行的col3为0。你会怎么做呢?@AnantKumar不客气!啊..对于第二种情况,您能告诉我哪一行的值为10,其他行的值为0的条件吗?只有第一行的值为10,所有其他行的值为0。谢谢。这很有帮助。我现在有一个新问题。假设对于新创建的行,我希望保留一个列具有特定值,其他列具有其他值。在结果图中,假设col3是值为10的整数。因此,在这三行中,首先我希望第1行的col3为10,第2行和第3行的col3为0。你会怎么做呢?@AnantKumar不客气!啊..对于第二种情况,您能告诉我哪一行的值为10,其他行的值为0的条件吗?只有第一行的值为10,所有其他行的值为0。