spark-面接問題(答えを含む)

3548 ワード

1 var,valとdefの3つのキーワードの違いは?var immutable variable val mutable variable def function defined keyword
2.objectとclassの違いは?
object単一例のコンストラクタなしメンバー変数とmethodはstaticでmainメソッドに直接アクセスできclassと同名で伴生オブジェクトを構成できる
classコンストラクタはmainメソッドで実行するにはオブジェクトを作成する必要があります
3.case class(サンプルクラス)は何ですか?scalaコンパイラの最適化により、可変データモデリングに使用できるパターンマッチングCase classに適した各パラメータは、varが自動的に伴生オブジェクトを生成し、半生オブジェクトにappayメソッドを自動的に生成して半生オブジェクトにunapplyメソッドを自動的に生成すると明示的に宣言されている場合を除き、val(不変の形式)でデフォルトで存在する.既存の値と同じ新しいオブジェクトを構築してhashcode,toString,equalsメソッドを自動的に生成し、デフォルトではシーケンス化できます.つまり、Serializableを実現します.
4 Option,TryとEitherの違いは?
3つの内部には2つのcase classが含まれています
違いは次のとおりです.
Optionはオプション値を表し、1つはSome(値を表す)、1つはNone(値が空)である.結果がnullの場合によく使用されます.
Try演算の結果には2つのケースがあり、1つは正常、すなわちSuccess、1つは実行エラー、異常放出、すなわちFailureであり、Failureには異常な情報が含まれている.
Eitherは結果を表す2つの可能性があるRightまたはleft
5.関数コリー化とは
関数を使用して、複数のパラメータのリストを定義できます.少ないパラメータリスト呼び出しメソッドを使用すると、欠落したパラメータリストをパラメータとする関数が生成されます.特定のパラメータを固定すると、残りのパラメータを受け入れる関数が得られます.
作用:1.適用性の向上、パラメータの多重化
2.遅延計算
  • trait(特質)とabstract class(抽象クラス)の違いは?

  • 1つのclassは、クラス間でインタフェースとフィールドを共有するために1つのabstract class traitしか継承できない複数のtraitを実装することができる.Java 8のインタフェースに似ています.インスタンス化できないため、パラメータはありません.
    abstract classはパラメータコンストラクタを定義できます
    二、プログラミング問題(各問題10点、合計30点}
  • 乗算表.
  •  def main(args: Array[String]): Unit = {
        for (
          i 

    2.BankAccountクラスを作成し、depositメソッドとwithdrawメソッド、読み取り専用balanceプロパティを追加します.
    class BankAcount(val balance : Int = 0) {
      def deposit() {}
      def withdraw() {}
    }
    
    
  • Spark wordcount計算.
  • object WordCount {
      def main(args: Array[String]) {
        if (args.length < 1) {
          System.err.println("Usage: WordCount ")
          System.exit(1)
        }
        val sparkConf = new SparkConf().setAppName("WordCount" 
        val ssc = new StreamingContext(sparkConf, Seconds(2))
        val lines = ssc.textFileStream(args(0))
        val words = lines.flatMap(_.split(" "))
        val wordCounts = words.map(x => (x, 1)).reduceByKey(_ + _)
        wordCounts.print()
        ssc.start()
        ssc.awaitTermination()
      }
    }
    

    三、簡単な解答(8点ごとに40点)
    1、driverの機能は何ですか.データのRDD上の変換と操作を宣言し、これらの要求をmaster機能1)に提出し、SparkContextを作成するプログラムで、所与のSparkMasterに接続する
    2)rddステージを分割してDAGSchedulerを生成する
    3)、taskSchedulerによりtaskをexecutorに生成して送信する
    その位置はmaster、slaveとは独立しています.マスターノードでは、別のノードから実行することもできます.唯一の要件は、Spark Workersからアクセスできるネットワークにある必要があります.
    2、RDDの幅依存と狭い依存?
    wide dependency or shuffle dependency複数の子RDDのPartitionは同じ親RDDのPartitionに依存する
    narrow dependency各親RDDのPartition最大布団RDDの1つのPartition使用
    3、mapとflatMap、mapPartitionの違いは?mapは、このRDDのすべての要素に関数を適用することによって、新しいRDDを返す.
    flatMapは、新しいRDDヘッダを返し、RDDのすべての要素に1つの関数を適用し、結果を平らにします.
    mapPartitionsは、このRDDの各パーティションに関数を適用することによって、新しいRDD preservespartitioningを返します.これはpairRDDであり、入力関数がkeysを変更しない限り、入力関数がパーティションを保持するかどうかを示します.デフォルトはfalseです.
    4、sparkのRDDは何ですか.どのような特性がありますか?
    RDDは、弾性分散データセットの可変で並列動作可能な要素のパーティションセットであり、各RDDは5つの主要な特性を有する.
    1)、パーティションリスト
    2)、各パーティションの計算に使用できる関数
    3)、他のRDDに依存するリスト
    4)オプションpairRDDのパーティション化器(例えばRDDはハッシュパーティションである)
    5)、各スライス(例えば、HDFSファイルブロックの位置)すなわちデータのローカル性を計算するために、ローカル最適な位置を優先的に選択する
    5、sparkでステージステージをどのように分割するかは並列タスクのセットであり、jobの部分として同じ関数ステージがShuffleが存在するか、または幅依存が境界になっているかによって区分されるreduceByKey、groupByKeyの演算子などの演算子が現在のjobの最後の演算子から前進し、幅依存に遭遇すると、現在このロットにおけるすべての演算子操作がステージに分割され、そして、このようにして、幅の広い依存に遭遇した場合、stageに分けられ、一番前の演算子まで進み続けます.最後にjob全体が複数のステージに分割され、ステージ間には依存関係があり、後のステージは前のステージに依存する.