Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将apachesparkscala重写为PySpark_Scala_Apache Spark_Pyspark - Fatal编程技术网

将apachesparkscala重写为PySpark

将apachesparkscala重写为PySpark,scala,apache-spark,pyspark,Scala,Apache Spark,Pyspark,社区,我对Scala不熟悉,对PySpark也不太熟悉。但是,我对Scala不太熟悉,因此希望有人能告诉我是否有人能帮助我将下面的ApacheSparkScala重新编写到PySpark 如果你想问我到目前为止做了些什么来帮助自己,我将诚实地说很少,因为我仍然处于编码的早期 因此,如果您可以帮助将以下内容重新编码到PySpark中,或者让我走上正确的道路,这样我就可以自己重新编码,这将非常有帮助 import org.apache.spark.sql.DataFrame def readPar

社区,我对Scala不熟悉,对PySpark也不太熟悉。但是,我对Scala不太熟悉,因此希望有人能告诉我是否有人能帮助我将下面的ApacheSparkScala重新编写到PySpark

如果你想问我到目前为止做了些什么来帮助自己,我将诚实地说很少,因为我仍然处于编码的早期

因此,如果您可以帮助将以下内容重新编码到PySpark中,或者让我走上正确的道路,这样我就可以自己重新编码,这将非常有帮助

import org.apache.spark.sql.DataFrame

def readParquet(basePath: String): DataFrame = {
  val parquetDf = spark
  .read
  .parquet(basePath)
  return parquetDf
}

def num(df: DataFrame): Int = {
  val numPartitions = df.rdd.getNumPartitions
  return numPartitions
}


def ram(size: Int): Int = {
  val ramMb = size
  return ramMb
}

def target(size: Int): Int = {
  val targetMb = size
  return targetMb
}


def dp(): Int = {
  val defaultParallelism  = spark.sparkContext.defaultParallelism
  return defaultParallelism
}

def files(dp: Int, multiplier: Int, ram: Int, target: Int): Int = {
  val maxPartitions = Math.max(dp * multiplier, Math.ceil(ram / target).toInt)
  return maxPartitions
}


def split(df: DataFrame, max: Int): DataFrame = {
  val repartitionDf = df.repartition(max)
  return repartitionDf
}

def writeParquet(df: DataFrame, targetPath: String) {
  return df.write.format("parquet").mode("overwrite").save(targetPath)
}

import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder().appName("spark-repartition-optimizer-app").getOrCreate()
spark.conf.set("spark.sql.shuffle.partitions", 2001) // example
val parquetDf = readParquet("/blogs/source/airlines.parquet/")
val numPartitions = num(parquetDf)
val ramMb = ram(6510) // approx. df cache size
val targetMb = target(128) // approx. partition size (between 50 and 200 mb)
val defaultParallelism = dp()
val maxPartitions = files(defaultParallelism, 2, ramMb, targetMb)
val repartitionDf = split(parquetDf, maxPartitions)
writeParquet(repartitionDf, "/blogs/optimized/airlines.parquet/")

我只需要自己将Scala代码重新编码到PySpark中。

这通过在PySpark中包含以下模块得到了修复

import module

我将开始搜索
pyspark.sql
模块中的方法和
pyspark.rdd.rdd
文档中的rdd方法。例如,您可以从
pyspark.sql
模块文档中搜索术语“parquet”,并找出
readParquet
函数的作用。链接:和@eemilk,谢谢联系。我想你说的是,除非你精通两种语言,否则将Scala重新编码到PySpark并不容易,对吗?我没有使用Scala编程,但这些函数看起来很容易重新写入python,PySpark->语法几乎与spark完全相同。它只是控制spark的API,因此从
pyspark.sql
模块中搜索spark方法,例如
repartition
,您可以阅读它的功能,并在pyspark的python中正确使用它。但你肯定需要了解python的一些知识,例如函数、循环等@eemilk,再次感谢你的帮助。我同意,这很容易。我刚刚遇到了一段scala代码,事实证明很难将其转换为PySpark。我不断收到错误消息:当我运行以下函数
def文件(dp,multiplier,ram,target)时,没有定义名称“math”:maxPartitions=math.max(dp*multiplier,math.ceil(ram/target).toInt)return maxPartitions
有什么想法吗?