Различные имена переменных с Python для циклов [duplicate]

При создании и развертывании приложений Spark все зависимости требуют совместимых версий.

  • версия Scala. Все пакеты должны использовать одну и ту же версию (2.10, 2.11, 2.12) Scala. Рассмотрим следующий (неверный) build.sbt:
    name := "Simple Project"
    
    version := "1.0"
    
    libraryDependencies ++= Seq(
       "org.apache.spark" % "spark-core_2.11" % "2.0.1",
       "org.apache.spark" % "spark-streaming_2.10" % "2.0.1",
       "org.apache.bahir" % "spark-streaming-twitter_2.11" % "2.0.1"
    )
    
    Мы используем spark-streaming для Scala 2.10, а оставшиеся пакеты для Scala 2.11. Допустимым файлом может быть
    name := "Simple Project"
    
    version := "1.0"
    
    libraryDependencies ++= Seq(
       "org.apache.spark" % "spark-core_2.11" % "2.0.1",
       "org.apache.spark" % "spark-streaming_2.11" % "2.0.1",
       "org.apache.bahir" % "spark-streaming-twitter_2.11" % "2.0.1"
    )
    
    , но лучше указать версию по всему миру и использовать %%:
    name := "Simple Project"
    
    version := "1.0"
    
    scalaVersion := "2.11.7"
    
    libraryDependencies ++= Seq(
       "org.apache.spark" %% "spark-core" % "2.0.1",
       "org.apache.spark" %% "spark-streaming" % "2.0.1",
       "org.apache.bahir" %% "spark-streaming-twitter" % "2.0.1"
    )
    
    Аналогично в Maven:
    <project>
      <groupId>com.example</groupId>
      <artifactId>simple-project</artifactId>
      <modelVersion>4.0.0</modelVersion>
      <name>Simple Project</name>
      <packaging>jar</packaging>
      <version>1.0</version>
      <properties>
        <spark.version>2.0.1</spark.version>
      </properties> 
      <dependencies>
        <dependency> <!-- Spark dependency -->
          <groupId>org.apache.spark</groupId>
          <artifactId>spark-core_2.11</artifactId>
          <version>${spark.version}</version>
        </dependency>
        <dependency>
          <groupId>org.apache.spark</groupId>
          <artifactId>spark-streaming_2.11</artifactId>
          <version>${spark.version}</version>
        </dependency> 
        <dependency>
          <groupId>org.apache.bahir</groupId>
          <artifactId>spark-streaming-twitter_2.11</artifactId>
          <version>${spark.version}</version>
        </dependency>
      </dependencies>
    </project>
    
  • Исправленная версия Все пакеты должны использовать тот же самый главный Spark версии (1.6, 2.0, 2.1, ...). Рассмотрим следующий (неверный) build.sbt:
    name := "Simple Project"
    
    version := "1.0"
    
    libraryDependencies ++= Seq(
       "org.apache.spark" % "spark-core_2.11" % "1.6.1",
       "org.apache.spark" % "spark-streaming_2.10" % "2.0.1",
       "org.apache.bahir" % "spark-streaming-twitter_2.11" % "2.0.1"
    )
    
    Мы используем spark-core 1.6, в то время как остальные компоненты находятся в Spark 2.0. Допустимым файлом может быть
    name := "Simple Project"
    
    version := "1.0"
    
    libraryDependencies ++= Seq(
       "org.apache.spark" % "spark-core_2.11" % "2.0.1",
       "org.apache.spark" % "spark-streaming_2.10" % "2.0.1",
       "org.apache.bahir" % "spark-streaming-twitter_2.11" % "2.0.1"
    )
    
    , но лучше использовать переменную:
    name := "Simple Project"
    
    version := "1.0"
    
    val sparkVersion = "2.0.1"
    
    libraryDependencies ++= Seq(
       "org.apache.spark" % "spark-core_2.11" % sparkVersion,
       "org.apache.spark" % "spark-streaming_2.10" % sparkVersion,
       "org.apache.bahir" % "spark-streaming-twitter_2.11" % sparkVersion
    )
    
    Аналогично в Maven:
    <project>
      <groupId>com.example</groupId>
      <artifactId>simple-project</artifactId>
      <modelVersion>4.0.0</modelVersion>
      <name>Simple Project</name>
      <packaging>jar</packaging>
      <version>1.0</version>
      <properties>
        <spark.version>2.0.1</spark.version>
        <scala.version>2.11</scala.version>
      </properties> 
      <dependencies>
        <dependency> <!-- Spark dependency -->
          <groupId>org.apache.spark</groupId>
          <artifactId>spark-core_${scala.version}</artifactId>
          <version>${spark.version}</version>
        </dependency>
        <dependency>
          <groupId>org.apache.spark</groupId>
          <artifactId>spark-streaming_${scala.version}</artifactId>
          <version>${spark.version}</version>
        </dependency> 
        <dependency>
          <groupId>org.apache.bahir</groupId>
          <artifactId>spark-streaming-twitter_${scala.version}</artifactId>
          <version>${spark.version}</version>
        </dependency>
      </dependencies>
    </project>
    
  • Исправленная версия, используемая в зависимостях Spark, должна соответствовать версии Spark установки Spark. Например, если вы используете 1.6.1 в кластере, вы должны использовать 1.6.1 для сборки банок. Неправильное рассогласование не всегда принимается.
  • Версия Scala, используемая для сборки jar, должна соответствовать версии Scala, используемой для создания развернутого Spark. По умолчанию (загружаемые двоичные файлы и сборки по умолчанию): Spark 1.x -> Scala 2.10 Spark 2.x -> Scala 2.11
  • Дополнительные пакеты должны быть доступны на рабочих узлах, если они включены в жирную банку. Существует множество опций, включая: --jars аргумент для spark-submit - для распространения локальных файлов jar. --packages для spark-submit - для получения зависимостей из репозитория Maven. При отправке в узел кластера вы должны включить приложение jar в --jars.
47
задан Curious2learn 25 October 2010 в 11:18
поделиться

6 ответов

30
ответ дан kanaka 22 August 2018 в 02:38
поделиться

бит длинный, он работает, я думаю ...

prices = [5, 12, 45]
names = []
for i, _ in enumerate(prices):
    names.append("price"+str(i+1))
dict = {}
for name, price in zip(names, prices):
    dict[name] = price
for item in dict:
    print(item, "=", dict[item])
2
ответ дан Leo Zhang 22 August 2018 в 02:38
поделиться

Еще один пример, который действительно является вариантом другого ответа , поскольку он также использует словарь:

>>> vr={} 
... for num in range(1,4): 
...     vr[str(num)] = 5 + num
...     
>>> print vr["3"]
8
>>> 
6
ответ дан PolyGeo 22 August 2018 в 02:38
поделиться
  • 1
    как вы изменяете vr, хотя? ваше решение побеждает всю цель. я очищаю данные из Интернета, с которыми мне нужно создавать экземпляры класса для каждого элемента контейнера, а количество элементов контейнера неизвестно ... как в вопросе 2 в этот поток, который я создал – Anthony 29 June 2018 в 00:48
  • 2
    @ Энтони вопрос, который я отвечаю здесь, гораздо более сосредоточен, чем то, с чем вы связались. У меня нет совета по этому вопросу. – PolyGeo 29 June 2018 в 00:55
  • 3
    это в основном тот же контекст. я имел в виду «Вопрос № 2», в этой нити на самом дне ... – Anthony 29 June 2018 в 01:32

У меня возникла ваша проблема, и вот мой ответ:

prices = [5, 12, 45]
list=['1','2','3']

for i in range(1,3):
  vars()["prices"+list[0]]=prices[0]
print ("prices[i]=" +prices[i])

, поэтому при печати:

price1 = 5 
price2 = 12
price3 = 45
8
ответ дан Raviteja 22 August 2018 в 02:38
поделиться
  • 1
    Это не работает. – Billal BEGUERADJ 27 April 2017 в 12:16
  • 2
    Здесь много ошибок, но подход как таковой не является полностью ошибочным; вы можете назначить vars()["prices"+str(i)] и иметь переменную с ожидаемым именем. – tripleee 30 January 2018 в 07:04

На объекте вы можете достичь этого с помощью setattr

>>> class A(object): pass
>>> a=A()
>>> setattr(a, "hello1", 5)
>>> a.hello1
5
15
ответ дан Stefano Borini 22 August 2018 в 02:38
поделиться
27
ответ дан Tim Čas 22 August 2018 в 02:38
поделиться
Другие вопросы по тегам:

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