2016-06-09 42 views
0

我正在使用databricks spark-csv模块以sqlContext的形式读取csv文件。我按照下面的示例所示自定义了我的模式。但是,我注意到在我的数据中,第三列是汽车的模型,其中的字符串在它前面总是有一个共同的字符串“model:”。有没有办法修剪掉常用字符串?当将csv读入火花sql数据框时删除列的常见字符串

from pyspark.sql import SQLContext 
from pyspark.sql.types import * 

sqlContext = SQLContext(sc) 
customSchema = StructType([ \ 
    StructField("year", IntegerType(), True), \ 
    StructField("make", StringType(), True), \ 
    StructField("model", StringType(), True), \ 
    StructField("comment", StringType(), True), \ 
    StructField("blank", StringType(), True)]) 

df = sqlContext.read \ 
    .format('com.databricks.spark.csv') \ 
    .options(header='true') \ 
    .load('cars.csv', schema = customSchema) 
+0

你能否至少提供你试图阅读的CSV的样本? – eliasah

回答

1

如果你已经知道常用的字符串是什么样的,你可以尝试使用map。

这里是例如(在Java中,对不起,我不知道蟒蛇):

JavaRDD<Row> rdd = df.javaRDD.map(new Function<Row,Row>() { 
    @Override 
    public Row call(Row r) throws Exception { 
     int iModel = r.fieldIndex("model"); 
     String model = r.getString(iModel).replaceFirst("model:",""); 
     // build row 
     Object[] objs = new Object[r.size()]; 
     for (int i=0; i<r.size(); i++) { 
      if (i == iModel) objs[i] = model; 
      else objs[i] = r.get(i); 
     } 

     return RowFactory.create(objs); 
    } 
}); 
DataFrame newDF = sqlContext.createDataFrame(rdd, df.schema()); 

结果:

前:

+-----+-------+----+-----------+----+ 
|blank|comment|make|  model|year| 
+-----+-------+----+-----------+----+ 
| bar| blabla| foo|model:m2016|2016| 
| bar| blabla| foo|model:m2015|2015| 
| bar| blabla| foo|model:m2014|2014| 
+-----+-------+----+-----------+----+ 

后:

+-----+-------+----+-----+----+ 
|blank|comment|make|model|year| 
+-----+-------+----+-----+----+ 
| bar| blabla| foo|m2016|2016| 
| bar| blabla| foo|m2015|2015| 
| bar| blabla| foo|m2014|2014| 
+-----+-------+----+-----+----+