我有以下数据:
17|ABC|3|89|89|0|0|2|
17|DFD|3|89|89|0|0|2|
17|RFG|3|89|89|0|0|2|
17|TRF|3|89|89|0|0|2|
当我使用以下代码时,我只得到8个元素而不是9个元素,因为最后一个不包含任何值。我无法使用Dataframe,因为我的csv是不固定的,每行可以有不同数量的元素。即使最后一列的值是Null / None,我怎么能得到它?
我当前的代码:
data_rdd.filter(x => x contains '|').map{line => line.split('|')}.foreach(elem => {
println("size of element ->" + elem.size)
elem.foreach{elem =>
println(elem)
}
})
答案 0 :(得分:1)
在Scala和Java中,public class ModulePresenter : SignalR, IModulePresenter
{
private ModuleService _service;
public ModulePresenter()
{
_service = new ModuleService();
MyHub.CommandSent += MyHub_CommandSent;
}
private void MyHub_CommandSent(object sender, CommandSentEventArgs e)
{
switch (e.Command)
{
case Enumerables.Command.RequestToken:
{
string finalDataJson = _service.ProcessData(e.Parameters);
SignalR.OnCommandCompleted(new CommandCompletedEventArgs(e.ClientDetails.ConnectionId, finalData));
}
break;
default:
break;
}
}
}
在默认情况下都不会返回任何结尾的空字符串。相反,您可以使用稍有不同的split
版本和第二个参数(已重载到Scala并在Java文档here中可见)。
方法定义为:
split(字符串正则表达式,整数限制)
这里的第二个参数限制了正则表达式模式的应用时间,使用负数将尽可能多地应用它。
因此,更改代码以使用:
split
请注意,此.map{line => line.split("\\|", -1)}
函数使用正则表达式而不是常规字符串或char。
答案 1 :(得分:0)
您可以如下分割字符串:
scala> "17|ABC|3|89|89|0|0|2|".split("\\|", -1)
res24: Array[String] = Array(17, ABC, 3, 89, 89, 0, 0, 2, "")
更新的代码:
data_rdd.filter(x => x contains '|').map{line => line.split("\\|", -1)}.foreach(elem => {
println("size of element ->" + elem.size)
elem.foreach{elem =>
println(elem)
}
}