После болезненных экспериментов, чтобы найти что-то быстрее, чем принятый ответ, я получил это, чтобы работать. Он работал примерно в 100 раз быстрее в наборе данных, на котором я его пробовал.
Если кто-то знает способ сделать это более элегантным, обязательно измените мой код. Я не мог найти способ, который работает без установки других столбцов, которые вы хотите сохранить в качестве индекса, а затем сбросить индекс и переименовать столбцы, но я бы предположил, что есть что-то еще, что работает.
b = DataFrame(a.var1.str.split(',').tolist(), index=a.var2).stack()
b = b.reset_index()[[0, 'var2']] # var1 variable is currently labeled 0
b.columns = ['var1', 'var2'] # renaming var1
[edit] Этот ответ для Play 1. * series!
Вы должны написать собственный модуль, затем ваши команды перейдут в файл commands.py
, ref : http://www.playframework.org/documentation/1.2.4/releasenotes-1.1#commands
Вы можете посмотреть на существующие модули, чтобы получить вдохновение, например: https://github.com/sim51/logisima-play-yml/blob/master/commands.py
В основном вы определяете нужные команды и запускаете их из «выполнить», метод, например:
COMMANDS = ['namespace:command']
def execute(**kargs):
command = kargs.get("command")
app = kargs.get("app")
args = kargs.get("args")
env = kargs.get("env")
if command == "namespace:command":
do_something()
, если вы хотите запустить что-то java - часто бывает! -:
def do_something():
java_cmd = app.java_cmd([], None, "play.modules.mymodule.MyClass", args)
try:
subprocess.call(java_cmd, env=os.environ)
except OSError:
print "Could not execute the java executable, please make sure the JAVA_HOME environment variable is set properly (the java executable should reside at JAVA_HOME/bin/java). "
sys.exit(-1)
print
Ps.
Создание настраиваемого модуля так же просто, как:
play new-module mymodule
Это праймер: http: //playframework.wordpress.com/2011/02/27/play-modules/, учитывая, что официальный Play! Документация модуля в этом отношении весьма ограничена
edit
Я думал, что добавлю немного информации:
, прежде чем вы сможете выполните свои команды, вы должны СОЗДАТЬ ваш модуль.
play build-module mymodule
модуль new-module / build-module ожидает, что модуль будет в корне папки проекта, но если у вас много таких возможностей, становится беспорядком. build-module module-srcs/mymodule
работает отлично.
Мы используем Play Jobs для таких задач.
@Every("1h")
public class WelcomeUser extends Job {
public void doJob() {
List<User> newUsers = User.find("newAccount = true").fetch();
for(User user : newUsers) {
Notifier.sayWelcome(user);
}
}
}
или
Задача начальной загрузки для таких задач, как db_migration:
@OnApplicationStart
public class Bootstrap extends Job {
public void doJob() {
if(Page.count() == 0) {
new Page("root").save();
Logger.info("The page tree was empty. A root page has been created.");
}
}
}
Посмотрите игровые документы: http://www.playframework.org/documentation/1.2.4/jobs
Для Play 2 вы можете создавать новые задачи с помощью SBT, следуя приведенной здесь документации:
http://www.scala-sbt.org/release/docs/Detailed-Topics / Задачи
В контексте генерируемого воспроизведения 2 Build.scala
он может выглядеть следующим образом:
import sbt._
import Keys._
import play.Project._
object ApplicationBuild extends Build {
val appName = "foo"
val appVersion = "1.0-SNAPSHOT"
val appDependencies = Seq(
// Add your project dependencies here,
jdbc,
anorm
)
val hello = TaskKey[Unit]("hello", "Prints 'Hello World'")
val helloTask = hello := {
println("Hello World")
}
lazy val main = play.Project(appName, appVersion, appDependencies).settings(
helloTask
)
}