PySpark tutorial 学习笔记4——SparkConf,SparkFiles,StorageLevel

SparkConf

要在本地/集群上运行Spark应用程序,需要设置一些配置和参数,这是由SparkConf提供的。 它提供运行Spark应用程序的配置。 以下代码块包含PySpark的SparkConf类的详细信息。

class pyspark.SparkConf (
   loadDefaults = True, 
   _jvm = None, 
   _jconf = None
)

最初,我们将使用SparkConf()创建一个SparkConf对象,它将从spark.* Java系统属性加载值。现在,您可以使用SparkConf对象设置不同的参数,它们的参数将优先于系统属性。

在SparkConf类中,有一些setter方法,它们支持链接。例如,您可以编写

conf.setAppName("PySpark App").setMaster("local")。一旦我们将SparkConf对象传递给Apache Spark,任何用户都无法修改它。

以下是SparkConf最常用的一些属性 - 

set(key, value) - 设置配置属性。

setMaster(value) - 设置主URL。

setAppName(value) - 设置应用程序名称。

get(key, defaultValue=None) - 获取密钥的配置值。

setSparkHome(value) - 在工作节点上设置Spark安装路径。

让我们考虑以下在PySpark程序中使用SparkConf的示例。在此示例中,我们将spark应用程序名称设置为PySpark App,并将spark应用程序的主URL设置为→spark:// master:7077。

以下代码块包含这些行,当它们添加到Python文件中时,它会设置运行PySpark应用程序的基本配置。

---------------------------------------------------------------------------------------
from pyspark import SparkConf, SparkContext
conf = SparkConf().setAppName("PySpark App").setMaster("spark://master:7077")
sc = SparkContext(conf=conf)
---------------------------------------------------------------------------------------

SparkFiles

在Apache Spark中,您可以使用sc.addFile(filepath)上传文件(sc是默认SparkContext),并使用SparkFiles.get(filename)获取当前使用的路径。 因此,SparkFiles通过SparkContext.addFile(filepath)添加的文件的路径。

SparkFiles包含以下类方法

  • get(filename):得到通过SparkContext.addFile()添加的文件的路径
  • getrootdirectory():指定根目录的路径,该目录包含通过SparkContext.addFile()添加的文件
----------------------------------------sparkfile.py------------------------------------
from pyspark import SparkContext
from pyspark import SparkFiles
finddistance = "/home/hadoop/examples_pyspark/finddistance.R"
finddistancename = "finddistance.R"
sc = SparkContext("local", "SparkFile App")
sc.addFile(finddistance)
print("Absolute Path -> %s" % SparkFiles.get(finddistancename))
----------------------------------------sparkfile.py------------------------------------
Command − The command is as follows −

$SPARK_HOME/bin/spark-submit sparkfiles.py
Output − The output for the above command is −
Absolute Path -> 
   /tmp/spark-f1170149-af01-4620-9805-f61c85fecee4/userFiles-641dfd0f-240b-4264-a650-4e06e7a57839/finddistance.R

StorageLevel

StorageLevel决定如何存储RDD。 在Apache Spark中,StorageLevel决定RDD是应该存储在内存中还是存储在磁盘上,或两者都存储。 它还决定是否序列化RDD以及是否复制RDD分区。

以下代码块具有StorageLevel的类定义 -

class pyspark.StorageLevel(useDisk, useMemory, useOffHeap, deserialized, replication = 1)

存储方式:

  • DISK_ONLY = StorageLevel(True, False, False, False, 1)

  • DISK_ONLY_2 = StorageLevel(True, False, False, False, 2)

  • MEMORY_AND_DISK = StorageLevel(True, True, False, False, 1)

  • MEMORY_AND_DISK_2 = StorageLevel(True, True, False, False, 2)

  • MEMORY_AND_DISK_SER = StorageLevel(True, True, False, False, 1)

  • MEMORY_AND_DISK_SER_2 = StorageLevel(True, True, False, False, 2)

  • MEMORY_ONLY = StorageLevel(False, True, False, False, 1)

  • MEMORY_ONLY_2 = StorageLevel(False, True, False, False, 2)

  • MEMORY_ONLY_SER = StorageLevel(False, True, False, False, 1)

  • MEMORY_ONLY_SER_2 = StorageLevel(False, True, False, False, 2)

  • OFF_HEAP = StorageLevel(True, True, True, False, 1)

以下StorageLevel示例,使用存储级别MEMORY_AND_DISK_2,这意味着RDD分区将具有2的复制。

------------------------------------storagelevel.py-------------------------------------
from pyspark import SparkContext
import pyspark
sc = SparkContext (
   "local", 
   "storagelevel app"
)
rdd1 = sc.parallelize([1,2])
rdd1.persist( pyspark.StorageLevel.MEMORY_AND_DISK_2 )
rdd1.getStorageLevel()
print(rdd1.getStorageLevel())
------------------------------------storagelevel.py-------------------------------------
Command − The command is as follows −

$SPARK_HOME/bin/spark-submit storagelevel.py
Output − The output for the above command is given below −

Disk Memory Serialized 2x Replicated

 

你可能感兴趣的:(大数据)