【问题标题】:What are SparkSession Config Options什么是 SparkSession 配置选项
【发布时间】:2017-08-18 21:11:54
【问题描述】:

我正在尝试使用 SparkSession 通过 Spark Notebook 将文件的 JSON 数据转换为 RDD。我已经有了 JSON 文件。

 val spark = SparkSession
   .builder()
   .appName("jsonReaderApp")
   .config("config.key.here", configValueHere)
   .enableHiveSupport()
   .getOrCreate()
val jread = spark.read.json("search-results1.json")

我是 spark 新手,不知道 config.key.hereconfigValueHere 使用什么。

【问题讨论】:

标签: json apache-spark spark-notebook


【解决方案1】:

SparkSession

要为 SparkSession 获取所有“作为键值对的各种 Spark 参数”,“使用 Dataset 和 DataFrame API 编程 Spark 的入口点”,运行以下命令(这是使用 Spark Python API,Scala 将是非常相似)。

import pyspark
from pyspark import SparkConf
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
SparkConf().getAll()

或者不导入SparkConf:

spark.sparkContext.getConf().getAll()

根据您使用的 API,请参阅以下内容之一:

  1. https://spark.apache.org/docs/latest/api/scala/org/apache/spark/sql/SparkSession.html
  2. https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.sql.SparkSession.html
  3. https://spark.apache.org/docs/latest/api/java/org/apache/spark/sql/SparkSession.html

您可以通过运行以下代码获得更深层次的 SparkSession 配置选项列表。大多数是相同的,但还有一些额外的。我不确定您是否可以更改这些。

spark.sparkContext._conf.getAll()  

SparkContext

要获取 SparkContext 的所有“作为键值对的各种 Spark 参数”、“Spark 功能的主要入口点”、...“连接到 Spark 集群”、...以及“创建 RDD” ,该集群上的累加器和广播变量,”运行以下命令。

import pyspark
from pyspark import SparkConf, SparkContext 
spark_conf = SparkConf().setAppName("test")
spark = SparkContext(conf = spark_conf)
SparkConf().getAll()

根据您使用的 API,请参阅以下内容之一:

  1. https://spark.apache.org/docs/latest/api/scala/org/apache/spark/SparkContext.html
  2. https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.SparkContext.html
  3. https://spark.apache.org/docs/latest/api/java/org/apache/spark/SparkContext.html

火花参数

您应该得到一个包含“作为键值对的各种 Spark 参数”的元组列表,类似于以下内容:

[(u'spark.eventLog.enabled', u'true'),
 (u'spark.yarn.appMasterEnv.PYSPARK_PYTHON', u'/<yourpath>/parcels/Anaconda-4.2.0/bin/python'),
 ...
 ...
 (u'spark.yarn.jars', u'local:/<yourpath>/lib/spark2/jars/*')]

根据您使用的 API,请参阅以下内容之一:

  1. https://spark.apache.org/docs/latest/api/scala/org/apache/spark/SparkConf.html
  2. https://spark.apache.org/docs/latest//api/python/reference/api/pyspark.SparkConf.html
  3. https://spark.apache.org/docs/latest/api/java/org/apache/spark/SparkConf.html

有关 Spark 属性的完整列表,请参阅:
http://spark.apache.org/docs/latest/configuration.html#viewing-spark-properties

设置 Spark 参数

每个元组都是("spark.some.config.option", "some-value"),您可以在应用程序中设置:

SparkSession

spark = (
    SparkSession
    .builder
    .appName("Your App Name")
    .config("spark.some.config.option1", "some-value")
    .config("spark.some.config.option2", "some-value")
    .getOrCreate())

sc = spark.sparkContext

SparkContext

spark_conf = (
    SparkConf()
    .setAppName("Your App Name")
    .set("spark.some.config.option1", "some-value")
    .set("spark.some.config.option2", "some-value"))

sc = SparkContext(conf = spark_conf)

spark-defaults

您还可以在spark-defaults.conf 文件中设置 Spark 参数:

spark.some.config.option1 some-value
spark.some.config.option2 "some-value"

然后使用spark-submit (pyspark) 运行您的 Spark 应用程序:

spark-submit \
--properties-file path/to/your/spark-defaults.conf \
--name "Your App Name" \
--py-files path/to/your/supporting/pyspark_files.zip \
--class Main path/to/your/pyspark_main.py

【讨论】:

  • 对于 SparkSession,似乎 spark.sparkContext.getConf().getAll() 提供的信息比 SparkConf().getAll() 更多。
【解决方案2】:

这就是我在我的 scala 中添加 spark 或 hive 设置的方式:

{
    val spark = SparkSession
        .builder()
        .appName("StructStreaming")
        .master("yarn")
        .config("hive.merge.mapfiles", "false")
        .config("hive.merge.tezfiles", "false")
        .config("parquet.enable.summary-metadata", "false")
        .config("spark.sql.parquet.mergeSchema","false")
        .config("hive.merge.smallfiles.avgsize", "160000000")
        .enableHiveSupport()
        .config("hive.exec.dynamic.partition", "true")
        .config("hive.exec.dynamic.partition.mode", "nonstrict")
        .config("spark.sql.orc.impl", "native")
        .config("spark.sql.parquet.binaryAsString","true")
        .config("spark.sql.parquet.writeLegacyFormat","true")
        //.config(“spark.sql.streaming.checkpointLocation”, “hdfs://pp/apps/hive/warehouse/dev01_landing_initial_area.db”)
        .getOrCreate()
}

【讨论】:

  • 它的编码你知道如何通过文件吗?
【解决方案3】:

设置一些配置的最简单方法:

spark.conf.set("spark.sql.shuffle.partitions", 500).

其中spark 指的是SparkSession,这样您就可以在运行时设置配置。当您想要一次又一次地更改配置以针对特定查询调整一些 spark 参数时,它非常有用。

【讨论】:

    【解决方案4】:

    简单来说,“config”方法中设置的值会自动传播到 SparkConf 和 SparkSession 自己的配置中。

    例如: 你可以参考 https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-sql-settings.html 了解如何使用配置选项为 SparkSession 设置 Hive 仓库位置

    要了解这个api可以参考:https://spark.apache.org/docs/2.0.1/api/java/org/apache/spark/sql/SparkSession.Builder.html

    【讨论】:

    • 非常感谢。但我的问题主要是关于设置 SparkSession 来读取 json 文件。
    • 好的,这是我使用的设置,val spark = SparkSession .builder() .appName("jsonReaderApp") .config("spark.sql.json.rdd2", 2) .getOrCreate()val jread = spark.read.json("bin/flatjson.json") 唯一的问题是我无法使用从流中获取的 JSON 数据。我必须更改文件的格式;每行必须是一个对象,对象之间不能有逗号。
    【解决方案5】:

    每个 Spark 配置选项都在以下位置进行了说明:http://spark.apache.org/docs/latest/configuration.html

    您可以像上面的示例那样在运行时设置这些,也可以通过给 spark-submit 的配置文件设置这些

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 2022-08-05
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      相关资源
      最近更新 更多