Разрешение файла в Linux по сравнению с в [закрывших] окнах

Существует открытая проблема в Spark JIRA, чтобы решить эту проблему - SPARK-20525 Причиной этой проблемы было несовпадение загрузчика искровых классов при загрузке Spark UDF.

Разрешение этого состоит в том, чтобы загрузить ваш сеанс искры после вашего переводчика. Пожалуйста, найдите пример кода. Также вы можете сослаться на мой github например SparkCustomTransformations

trait CustomTransformations extends Serializable {
  def execute(spark: SparkSession, df: DataFrame, udfFunctions: AnyRef*): DataFrame
}

// IMPORTANT spark session should be lazy evaluated
lazy val spark = getSparkSession

def getInterpretor: scala.tools.nsc.interpreter.IMain = {

  import scala.tools.nsc.GenericRunnerSettings
  import scala.tools.nsc.interpreter.IMain

  val cl = ClassLoader.getSystemClassLoader
  val conf = new SparkConf()
  val settings = new GenericRunnerSettings(println _)
  settings.usejavacp.value = true

  val intp = new scala.tools.nsc.interpreter.IMain(settings, new java.io.PrintWriter(System.out))
  intp.setContextClassLoader
  intp.initializeSynchronous

  intp
}

val intp = getInterpretor

val udf_str =
  """
    (str:String)=>{
      str.toLowerCase
    }
    """
val customTransStr =
  """
    |import org.apache.spark.SparkConf
    |import org.apache.spark.sql.{DataFrame, SparkSession}
    |import org.apache.spark.sql.functions._
    |
    |new CustomTransformations {
    |    override def execute(spark: SparkSession, df: DataFrame, func: AnyRef*): DataFrame = {
    |
    |      //reading your UDF
    |      val str_lower_udf = spark.udf.register("str_lower", func(0).asInstanceOf[Function1[String,String]])
    |
    |      df.createOrReplaceTempView("df")
    |      val df_with_UDF_cols = spark.sql("select a.*, str_lower(a.fakeEventTag) as customUDFCol1 from df a").withColumn("customUDFCol2", str_lower_udf(col("fakeEventTag")))
    |
    |      df_with_UDF_cols.show()
    |      df_with_UDF_cols
    |    }
    |}
  """.stripMargin

intp.interpret(udf_str)
var udf_obj = intp.eval(udf_str)

val eval = new com.twitter.util.Eval
val customTransform: CustomTransformations = eval[CustomTransformations](customTransStr)


val sampleSparkDF = getSampleSparkDF
val outputDF = customTransform.execute(spark, sampleSparkDF, udf_obj)

outputDF.printSchema()
outputDF.show()

5
задан jbu 18 November 2008 в 19:22
поделиться

2 ответа

Оценка флеш-карты: обычно, флеш-карты используют одно из семейства FAT файловых систем; FAT не поддерживает безопасность вообще, поэтому как только Вы копируете файл в него, информация о безопасности потеряна. Таким образом для Вашего первого вопроса, любой, у кого есть флеш-карта, может считать ее на любом компьютере от любой учетной записи пользователя. Возможно отформатировать флеш-карты с помощью другой файловой системы (например, NTFS, который действительно поддерживает безопасность); в этом случае, если учетные записи (в Windows, по крайней мере, это должна быть учетная запись домена или подобный, просто назвав две учетных записи, то же не сделает этого), не существуют на целевом компьютере, только пользователь, который может проигнорировать полномочия файловой системы (такие как корень на *отклоняют или Администратор в Windows) сможет получить доступ к файлу.

Для второго я не на 100% уверен, но я полагаю, что это зависит от того, как Вы копируете его; вещи как FTP и rcp обычно не копируют полномочия, таким образом, я предположил бы, что файл получает некоторые полномочия по умолчанию для целевого каталога или значение по умолчанию, встроенное в программу копии, в зависимости от того, что делает программа копии.

Для окон насколько я знаю дескриптор безопасности первоначально наследован от целевой папки; полномочия, снова, не сохраняются через машины. Это может быть изменено после копии.

В целом, кроме определенных сред, которые разработаны для передачи полномочий, я предположил бы, что передача любого файла от одного компьютера до другого сбрасывает права доступа к значению по умолчанию (обычно независимо от того, что новый файл в том месте получил бы).

14
ответ дан 18 December 2019 в 08:32
поделиться

как технофил сказал, съемные диски обычно используют файловые системы FAT, таким образом, никакая информация о разрешении не копируется вообще.

на более 'прямых' копиях между *отклоняют машины, если запись выполняется под корнем, обычно существуют флаги для сохранения битов полномочий и владельца/группы. также, большинство из них сохраняет идентификационные данные пользователя/группы числами. если нет никакой 'глобальной' пользовательской базы данных идентификационных данных (LDAP, NIS или даже AD), несомненно, будут искать 'по имени' идентификационные данные.

некоторые примеры:

  • NFS: принимает 'идентификационные данные числом', если Вы не используете некоторую опцию 'сквоша' сделать каждый файл тем же владельцем/группой.
  • CP: '-p' флаг сохраняет режим, владение (числом) и метка времени.
  • scp: '-p' флаг сохраняет режимы, но (обычно) не владение
  • rsync: только корень может сохранить владение (-o,-g, или-p), пытается соответствовать именам пользователей, но отступает к идентификаторам пользователей если не возможный.
6
ответ дан 18 December 2019 в 08:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: