在没有架构的情况下访问TSV

时间:2015-02-18 05:49:37

标签: scala scalding

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

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

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

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

2 个答案:

答案 0 :(得分:0)

Scalding提供两种API

  1. 基于字段的API
  2. 类型安全的API
  3. 在这种情况下,您必须使用类型安全的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" ) ) 
    

答案 1 :(得分:0)

太棒了,@ sarveshKsingh。只是在.write末尾缺少一个括号

val fromFile:TypedPipe [String] = TypedPipe.from(TextLine(" abc.tsv#34;))

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.