|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文件,标题将是U和W?谢谢。
我认为唯一的解决方案是编写自己的自定义textbasedfileformat,它将像您一样处理3行文本格式。
请参阅org.apache.spark.sql.execution.datasources.csv.csvfileformat Inspiration。
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 |
+----------+----------------------------------------------------------------------------------+