处理spark中的数据并保存结果

时间:2016-10-10 13:28:19

标签: apache-spark hive apache-zeppelin

我有三张表格,每张数据都是2Gb。

  1. DC - 第一张表包含人的数据(姓名,类型,护照等)。
  2. EC - 第二个表包含此人的地址。
  3. ECK - 第三张表包含此人账单的地址。
  4. 我需要迭代第二个表并在第三个表中通过护照进行搜索,以生成最佳地址的分数(多个算法)。

    如何处理这些数据并将结果保存在表格中?

    注意:我正在处理镶木地板文件

    更新(@cheseaux):到目前为止我做了

    我有3个文件:DC.txt,EC.txt和ECK.txt

    导入数据:

    val DC = sqlContext.read
              .format("com.databricks.spark.csv")
              .option("header", "false")
              .option("inferSchema", "false")
              .option("mode", "DROPMALFORMED")
              .option("delimiter", "|")
              .load("/DC.txt")
    

    并保存到hive上下文:

    DC.select("*").write
        .format("com.databricks.spark.csv")
        .option("header", "false")
        .option("inferSchema", "false")
        .option("mode", "DROPMALFORMED")
        .option("delimiter", "|")
        .option("quote", " ")
        .save("hdfs://localhost:8020/project/DC")
    

    创建一个外部表:

    CREATE EXTERNAL TABLE EC(
            some     String, 
            var   String, 
            here     String
        )
    ROW FORMAT
    DELIMITED FIELDS TERMINATED BY '\|'
    STORED AS TEXTFILE 
    LOCATION 'hdfs://localhost:8020/project/DC'
    

    并创建一个镶木桌子:

    CREATE TABLE 
        EC_PARQUET(
            some     String, 
            var   String, 
            here     String
      )
    ROW FORMAT
        SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
    STORED AS
        INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
        OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
    

    将所有数据插入镶木桌:

    INSERT INTO EC_PARQUET SELECT * FROM EC
    

    现在我正在尝试使用这些数据:

    val hc = new org.apache.spark.sql.hive.HiveContext(sc)
    val ec = hc.sql("SELECT * FROM EC_PARQUET")
    

    尝试:

    import org.apache.spark.sql.Row;
    
    val test = ec.take(100000).map(row => {
        val row1 = row.getAs[String](1)
        val make = if (row1.toLowerCase == "cualquiercosa") "S" else row1
        Row(row(0),make,row(3))
      }).registerTempTable("teste2")
    

    如何使用此修改列创建表?

0 个答案:

没有答案