我有一个制表符分隔文件(tsv),我不知道其架构,我想使用“Scalding”从每一行中删除第一列。
我知道如果架构已知,那么我可以使用
val dataControlSchema = List('a,'b,'c,'d,'e,'f)
Tsv("abc.tsv").read
.discard('a)
.write(Tsv("output1.tsv"))
但问题是我不知道架构,可能会有 6 列或 7 列甚至更多。但它是固定的,我必须删除第一列 .. 任何帮助将不胜感激
@sarveshKsingh 的精彩回答。.write 末尾缺少一个括号
val fromFile: TypedPipe[ String ] = TypedPipe.from( TextLine("abc.tsv" ) )
fromFile
.map( _.split( "\t" ) ) // now should be TypedPipe[ Array[ String ] ]
.map( _.toList ) // now should be TypedPipe[ List[ String ] ]
.map( _.drop( 1 ) ) // this should drop first string from the List
.map( _.mkString( "\t" ) ) // Now TypedList[ String ]
.write( TypedTsv( "output.tsv" )) // a bracket was missing.
Scalding 提供了两种 API
在这种情况下,您将不得不使用类型安全的 API,
val fromFile: TypedPipe[ String ] = TypedPipe.from( TextLine("abc.tsv" ) )
fromFile
.map( _.split( "\t" ) ) // now should be TypedPipe[ Array[ String ] ]
.map( _.toList ) // now should be TypedPipe[ List[ String ] ]
.map( _.drop( 1 ) ) // this should drop first string from the List
.map( _.mkString( "\t" ) ) // Now TypedList[ String ]
.write( TypedTsv( "output.tsv" ) )