Это просто упражнение по программированию, но вы можете попробовать что-то вроде этого:
import org.apache.spark.sql.{DataFrame, Column}
import org.apache.spark.sql.types.{StructType, StructField}
import org.apache.spark.sql.{functions => f}
import scala.util.Try
case class DFWithDropFrom(df: DataFrame) {
def getSourceField(source: String): Try[StructField] = {
Try(df.schema.fields.filter(_.name == source).head)
}
def getType(sourceField: StructField): Try[StructType] = {
Try(sourceField.dataType.asInstanceOf[StructType])
}
def genOutputCol(names: Array[String], source: String): Column = {
f.struct(names.map(x => f.col(source).getItem(x).alias(x)): _*)
}
def dropFrom(source: String, toDrop: Array[String]): DataFrame = {
getSourceField(source)
.flatMap(getType)
.map(_.fieldNames.diff(toDrop))
.map(genOutputCol(_, source))
.map(df.withColumn(source, _))
.getOrElse(df)
}
}
Пример использования:
scala> case class features(feat1: String, feat2: String, feat3: String)
defined class features
scala> case class record(label: String, features: features)
defined class record
scala> val df = sc.parallelize(Seq(record("a_label", features("f1", "f2", "f3")))).toDF
df: org.apache.spark.sql.DataFrame = [label: string, features: struct]
scala> DFWithDropFrom(df).dropFrom("features", Array("feat1")).show
+-------+--------+
| label|features|
+-------+--------+
|a_label| [f2,f3]|
+-------+--------+
scala> DFWithDropFrom(df).dropFrom("foobar", Array("feat1")).show
+-------+----------+
| label| features|
+-------+----------+
|a_label|[f1,f2,f3]|
+-------+----------+
scala> DFWithDropFrom(df).dropFrom("features", Array("foobar")).show
+-------+----------+
| label| features|
+-------+----------+
|a_label|[f1,f2,f3]|
+-------+----------+
С Resharper ALT+SHIFT+L переходит к текущему файлу в Проводнике Решения.
Меню инструментов-> Опции
Затем в области "Project And Solutions", можно выбрать для отслеживания активного объекта.
Прибытие из Eclipse Вы пропустите много таких функций. То, что я пропускаю больше всего для навигации, является легким , переходят к типу , , переходят к наследнику и т.д. Другими функциями, такими как поддержка nUnit не является часть ванильной Visual Studio, также. Вот список Дополнений, которые устраняют разрыв:
, Но здесь прибывает недостаток: они все заряжают Вас деньги (TestDriven.net только для коммерческого использования). Однако они все предлагают бесплатные демонстрационные версии.
Я не знаю ни о каких способах сделать это, но я соглашаюсь, что это была бы хорошая функция.
можно отследить объекты в Проводнике Решения хотя (Опции-> Проект и Решения-> Общий-> Дорожка Активный Объект в Проводнике Решения).
Я не могу помочь Вам с представлением класса, но возможно Вы хотите дать проводнику решения попытку? Можно синхронизировать этого через:
tools -> options -> projects and solutions -> general
enable "track active item in solution explorer"
Для Visual Studio 2005
я нашел решение, которое не обновляет представление автоматически, но по крайней мере вы получаете контекстная запись, которая помогает:
http://blogs.msdn.com/ansonh/archive/2005/12/09/502020.aspx
Вы также можете определить сочетание клавиш:
Сервис-> Параметры -> Среда-> Клавиатура и посмотрите, сможете ли вы найти «View.SynchronizeClassView».
О, просто для смеха - вот ответ Microsoft: http://msdn.microsoft.com/en-us/library/2dae8h2s.aspx
... вы можете выбрать любой символ в редакторе кода и найдите его мгновенно ...
После 7 шагов ...
"Представление классов автоматически прокручивает в местоположение выбранного символа in its hierarchy. "
У меня еще не было времени, чтобы заставить это работать, но есть код для надстройки VS2003 / 2005 для автосинхронизации здесь (см. Сообщение помечен как «ответ»).
Между прочим, этот вопрос кажется дубликатом этого .
на основе ответа kingmaxxx я обнаружил, что вы можете добавить кнопку на свою панель инструментов, чтобы сделать то же самое:
Инструменты | Настройка -> Команды [вкладка] -> Просмотр [Категории]
Захватите кнопку «Синхронизировать представление классов» и перетащите его на одну из панелей инструментов.
After reading kingmaxxx's reply, I went to Tools->Options->Environment->Keyboard and bound Ctrl+Shift+C to View.SynchronizeClassView in Text Editor view. This seems to supplant and supplement the original behavior (View.ClassView), as it will display ClassView if it wasn't visible and focus on the current class.
(Visual Studio 2008)