代码改变世界

每日问题记录20171114

2017-11-14 22:09  轩脉刃  阅读(671)  评论(0编辑  收藏  举报

spark-shell要打印一个string变量的全部怎么办?

spark-shell如果打印一个string变量,会阶段,需要使用println(xx)才能打印出全部的数值

===============

spark-sql如何写入数据到hive中?

先创建一个List,然后使用List来创建DataFrame,最后再存储到hive中去。

   // Spark 2.1
    val spark = SparkSession.builder().master("local").getOrCreate()

    // Given a list of mixture of strings in integers
    val values = List("20030100013280", 1.0)

    // Create `Row` from `Seq`
    val row = Row.fromSeq(values)

    // Create `RDD` from `Row`
    val rdd = spark.sparkContext.makeRDD(List(row))

    // Create schema fields
    val fields = List(
      StructField("First Column", StringType, nullable = false),
      StructField("Second Column", DoubleType, nullable = false)
    )

    // Create `DataFrame`
    val dataFrame = spark.createDataFrame(rdd, StructType(fields))

    // Done! Yay!
    dataFrame.show(1)

===============

如何写一个class到另外一个class的转换方法?

创建一个object 类,然后再这个类里面写转换方法

如何把string存到List[String] 里面去?

val linkids = new List[String]

linkids = point.linkid :: linkids

===============

dataframe和dataset的区别?

dataframe和dataset的结构差不多,拥有完全相同的成员函数,区别只是每一行数据类型不同,dataframe获取每一行数据的时候,需要使用getAs的方式来获取属性。

rdd,dataframe, dataset的转换:

dataframe 和 dataset 转rdd:

val rdd1=testDF.rdd
val rdd2=testDS.rdd

rdd转dataframe:

import spark.implicits._
val testDF = rdd.map {line=>
      (line._1,line._2)
    }.toDF("col1","col2")

rdd转dataset:

import spark.implicits._
case class Coltest(col1:String,col2:Int)extends Serializable //定义字段名和类型
val testDS = rdd.map {line=>
      Coltest(line._1,line._2)
    }.toDS

dataset转dataframe:

import spark.implicits._
val testDF = testDS.toDF

dataframe转dataset:

import spark.implicits._
case class Coltest(col1:String,col2:Int)extends Serializable //定义字段名和类型
val testDS = testDF.as[Coltest]

===============

scala如何初始化List?

想使用new进行初始化List,出现错误:
Error:(67, 36) class List is abstract; cannot be instantiated
var carMatchFlowTrailLists = new ListCarMatchFlowTrail

直接使用:

val adjustTrail = List[Trail]()

===============

出现错误:

Saving data in the Hive serde table <table_name> is not supported yet. Please use the insertInto() API as an alternative.

改成:
carMatchFlowTrailListsRdd.flatMap(item => item).toDF().write.mode(SaveMode.Append).insertInto("dwd_car_match_flow_trail_di")

===============

出现错误:

org.apache.spark.SparkException: Dynamic partition strict mode requires at least one static partition column. To turn this off set hive.exec.dynamic.partition.mode=nonstrict


      spark.sql("SET hive.exec.dynamic.partition = true")
      spark.sql("SET hive.exec.dynamic.partition.mode = nonstrict ")
      spark.sql("SET hive.exec.max.dynamic.partitions.pernode = 400")

===============

hive中外部表和内部表的区别?

简单来说,就是外部表数据存放在外部,删除表的时候只删除表结构,不删除表数据。而内部表,数据是存放在hive制定位置,删除表的时候,也会删除表的数据。

http://www.aboutyun.com/thread-7458-1-1.html