0

我有一个制表符分隔文件(tsv),我不知道其架构,我想使用“Scalding”从每一行中删除第一列。

我知道如果架构已知,那么我可以使用

val dataControlSchema = List('a,'b,'c,'d,'e,'f)
  Tsv("abc.tsv").read
  .discard('a)
  .write(Tsv("output1.tsv"))

但问题是我不知道架构,可能会有 6 列或 7 列甚至更多。但它是固定的,我必须删除第一列 .. 任何帮助将不胜感激

4

2 回答 2

0

@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. 
于 2015-02-18T15:24:08.117 回答
0

Scalding 提供了两种 API

  1. 基于字段的 API
  2. 类型安全的 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" ) ) 
于 2015-02-18T09:15:31.590 回答