如何加载连续3行的数据集被视为一个?

|T 2009-08-26 17:1...| 

|U http://twitter....|

| W No Post Title|

| |

|T 2009-11-01 02:4...|

|U http://twitter....|

| W No Post Title|

| |

|T 2009-11-18 16:5...|

|U http://twitter....|

| W No Post Title|

| |

现在我有这样的数据 我想分组每4行数据。如何加载连续3行的数据集被视为一个?

所以一个行将包含

T 2009-X-XX U http://xxxx  W xxxxxxx" 

这可能吗? 或者有没有办法把它变成一个csv文件,头文件是T U和W? 谢谢。

回答:

我认为唯一的解决方案是编写自己的自定义TextBasedFileFormat,它可以处理像你的3行文本格式。

请参阅org.apache.spark.sql.execution.datasources.csv.CSVFileFormat以获取灵感。


可能CSVFileFormat可以轻松处理格式为行分隔符的格式。

回答:

你可以很容易地合并行,如果你可以在下面的数据帧格式,让他们:

+-------+--------------------+ 

|line_nr| line|

+-------+--------------------+

| 0|T 2009-08-26 17:...|

| 1|U http://twitter...|

| 2| W No Post Title|

| 3| |

| 4|T 2009-11-01 02:...|

| 5|U http://twitter...|

| 6| W No Post Title|

| 7| |

| 8|T 2009-11-18 16:...|

| 9|U http://twitter...|

| 10| W No Post Title|

| 11| |

+-------+--------------------+

的你可以这样做:

df 

.groupBy((floor(($"line_nr")/4)).as("line_group"))

.agg((concat_ws("", collect_list($"line"))).as("line"))

.show(false)

+----------+----------------------------------------------------------------------------------+

|line_group|line |

+----------+----------------------------------------------------------------------------------+

|0 |T 2009-08-26 17:1...U http://twitter.... W No Post Title |

|1 |T 2009-11-01 02:4...U http://twitter.... W No Post Title |

|2 |T 2009-11-18 16:5...U http://twitter.... W No Post Title |

+----------+----------------------------------------------------------------------------------+

以上是 如何加载连续3行的数据集被视为一个? 的全部内容, 来源链接: utcz.com/qa/258056.html

回到顶部