如何加载3个连续行的数据集?

时间:2017-12-02 19:55:07

标签: apache-spark apache-spark-sql

|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行数据进行分组。

所以一行将包含

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

这可能吗? 或者无论如何将它变成一个csv文件,标题将是T U和W? 感谢。

2 个答案:

答案 0 :(得分:1)

我认为唯一的解决方案就是编写自己的自定义TextBasedFileFormat,以处理与您类似的3行文字格式。

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

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

答案 1 :(得分:1)

如果您可以使用以下数据框格式获取行,则可以轻松合并行:

+-------+--------------------+
|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                    |
+----------+----------------------------------------------------------------------------------+