Я хочу удалить все мусорное ведро и obj папки для принуждения всех проектов восстановить все

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

import scala.reflect.ClassTag
import org.apache.spark.{Partition, TaskContext}
import org.apache.spark.rdd.RDD

// Each random partition will hold `numValues` items
final class RandomPartition[A: ClassTag](val index: Int, numValues: Int, random: => A) extends Partition {
  def values: Iterator[A] = Iterator.fill(numValues)(random)
}

// The RDD will parallelize the workload across `numSlices`
final class RandomRDD[A: ClassTag](@transient private val sc: SparkContext, numSlices: Int, numValues: Int, random: => A) extends RDD[A](sc, deps = Seq.empty) {

  // Based on the item and executor count, determine how many values are
  // computed in each executor. Distribute the rest evenly (if any).
  private val valuesPerSlice = numValues / numSlices
  private val slicesWithExtraItem = numValues % numSlices

  // Just ask the partition for the data
  override def compute(split: Partition, context: TaskContext): Iterator[A] =
    split.asInstanceOf[RandomPartition[A]].values

  // Generate the partitions so that the load is as evenly spread as possible
  // e.g. 10 partition and 22 items -> 2 slices with 3 items and 8 slices with 2
  override protected def getPartitions: Array[Partition] =
    ((0 until slicesWithExtraItem).view.map(new RandomPartition[A](_, valuesPerSlice + 1, random)) ++
      (slicesWithExtraItem until numSlices).view.map(new RandomPartition[A](_, valuesPerSlice, random))).toArray

}

Когда у вас есть это, вы можете использовать его, передавая свой собственный генератор случайных данных, чтобы получить RDD[Int]

val rdd = new RandomRDD(spark.sparkContext, 10, 22, scala.util.Random.nextInt(100) + 1)
rdd.foreach(println)
/*
 * outputs:
 * 30
 * 86
 * 75
 * 20
 * ...
 */

или RDD[(Int, Int, Int)]

def rand = scala.util.Random.nextInt(100) + 1
val rdd = new RandomRDD(spark.sparkContext, 10, 22, (rand, rand, rand))
rdd.foreach(println)
/*
 * outputs:
 * (33,22,15)
 * (65,24,64)
 * (41,81,44)
 * (58,7,18)
 * ...
 */

и конечно, вы можете также легко обернуть его в DataFrame:

spark.createDataFrame(rdd).show()
/*
 * outputs:
 * +---+---+---+
 * | _1| _2| _3|
 * +---+---+---+
 * |100| 48| 92|
 * | 34| 40| 30|
 * | 98| 63| 61|
 * | 95| 17| 63|
 * | 68| 31| 34|
 * .............
 */

Обратите внимание, как в этом случае генерируемые данные различаются каждый раз, когда воздействуют на RDD / DataFrame. Изменяя реализацию RandomPartition для фактического хранения значений вместо генерации их на лету, вы можете иметь стабильный набор случайных элементов, сохраняя при этом гибкость и масштабируемость этого подхода.

Одним из замечательных свойств подхода без сохранения состояния является то, что вы можете генерировать огромный набор данных даже локально. На моем ноутбуке через несколько секунд запустилось следующее:

new RandomRDD(spark.sparkContext, 10, Int.MaxValue, 42).count
// returns: 2147483647
234
задан Lauren Van Sloun 16 November 2018 в 09:37
поделиться

8 ответов

Это зависит от того, какую оболочку вы предпочитаете использовать.

Если вы используете оболочку cmd в Windows, тогда должно работать следующее:

FOR /F "tokens=*" %%G IN ('DIR /B /AD /S bin') DO RMDIR /S /Q "%%G"
FOR /F "tokens=*" %%G IN ('DIR /B /AD /S obj') DO RMDIR /S /Q "%%G"

Если вы используете оболочку типа bash или zsh (например, git bash или babun в Windows или в большинстве оболочек Linux / OS X), то это гораздо более приятный и лаконичный способ сделать то, что вы хотите:

find . -iname "bin" | xargs rm -rf
find . -iname "obj" | xargs rm -rf

, и это можно сократить до одной строки с помощью ИЛИ:

find . -iname "bin" -o -iname "obj" | xargs rm -rf

Обратите внимание, что если ваши каталоги имен файлов содержат пробелы или кавычки, find отправит эти записи как есть, которые xargs могут разбить на несколько записей. В macOS обходной путь должен использовать -print0 и -0, поэтому приведенные выше примеры:

find . -iname "bin" -print0 | xargs -0 rm -rf
find . -iname "obj" -print0 | xargs -0 rm -rf

и:

find . -iname "bin" -o -iname "obj" -print0 | xargs -0 rm -rf

Если вы используете Powershell, вы можете использовать это:

Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }

, как видно из Robert H '

365
ответ дан 23 November 2019 в 03:28
поделиться

Я думаю, что вы можете щелкнуть правой кнопкой мыши свое решение / проект и нажать кнопку «Очистить».

Насколько Я помню, это работало так. У меня нет с собой VS.NET, поэтому я не могу его проверить.

-1
ответ дан dr. evil 23 November 2019 в 03:28
поделиться

Разве «чистый» не достаточно хорош? Обратите внимание, что вы можете вызвать msbuild с помощью / t: clean из командной строки.

1
ответ дан Brian 23 November 2019 в 03:28
поделиться

Я действительно ненавижу файлы obj, засоряющие исходные деревья. Обычно я настраиваю проекты так, чтобы они выводили файлы obj за пределы исходного дерева. Для проектов C # я обычно использую

 <IntermediateOutputPath>..\..\obj\$(AssemblyName)\$(Configuration)\</IntermediateOutputPath>

. Для проектов C ++

 IntermediateDirectory="..\..\obj\$(ProjectName)\$(ConfigurationName)"
1
ответ дан 23 November 2019 в 03:28
поделиться

У нас есть большие файлы .SLN со многими файлами проекта. Я начал политику наличия директории «ViewLocal», в которой находятся все неконтролируемые файлы. Внутри этого каталога находится каталог Inter и Out. Для промежуточных файлов и выходных файлов соответственно.

Это, очевидно, облегчает просто перейти в каталог 'viewlocal' и выполнить простое удаление, чтобы избавиться от всего.

Прежде чем вы потратили время на выяснение способ обойти это с помощью сценариев, вы можете подумать о создании чего-то подобного.

Хотя я не буду лгать, поддержание такой настройки в большой организации оказалось… интересным. Особенно, когда вы используете такие технологии, как QT, которые любят обрабатывать файлы и создавать неконтролируемые исходные файлы.

0
ответ дан 23 November 2019 в 03:28
поделиться

На нашем сервере сборки мы явно удаляем каталоги bin и obj через Nant скрипты.

Каждый скрипт сборки проекта отвечает за свои выходные / временные каталоги. Так хорошо работает. Поэтому, когда мы меняем проект и добавляем новый, мы основываем сценарий на работающем сценарии, и вы замечаете этап удаления и заботитесь о нем.

Если вы делаете это на своем компьютере для разработки логики, я бы придерживался очистить через Visual Studio, как уже упоминали другие.

1
ответ дан 23 November 2019 в 03:28
поделиться

http://vsclean.codeplex.com/

Инструмент командной строки, который находит Visual Studio и запускает Clean командовать ими. Это позволяет вам чистить вверх по каталогам / bin / * всех этих старые проекты, над которыми вы валяетесь ваш жесткий диск

1
ответ дан 23 November 2019 в 03:28
поделиться

Я всегда добавляю новую цель в мои решения для достижения этой цели.

<Target Name="clean_folders">
  <RemoveDir Directories=".\ProjectName\bin" />
  <RemoveDir Directories=".\ProjectName\obj" />
  <RemoveDir Directories="$(ProjectVarName)\bin" />
  <RemoveDir Directories="$(ProjectVarName)\obj" />
</Target>

И вы можете вызвать ее из командной строки

msbuild /t:clean_folders

Это может быть ваш командный файл.

msbuild /t:clean_folders
PAUSE
31
ответ дан 23 November 2019 в 03:28
поделиться
Другие вопросы по тегам:

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