Из документация :
Spark также автоматически сохраняет некоторые промежуточные данные в операциях случайного воспроизведения (например, reduceByKey), даже без вызова пользователей, сохраняющихся. Это делается для того, чтобы избежать перекомпоновки всего входа, если узел не работает во время перетасовки. Мы по-прежнему рекомендуем пользователям переходить на результирующий RDD, если они планируют его повторно использовать.
blockquote>Базовая файловая система также будет кэшировать доступ к диску.
Имена перечислений находятся в глобальной области видимости, они должны быть уникальными. Помните, что вам не нужно квалифицировать символы перечисления с именем перечисления, вы просто делаете:
Month xmas = December;
, а не:
Month xmas = Month.December; /* This is not C. */
имена символов с именем enum:
enum Month { Month_January, Month_February, /* and so on */ };
Я предлагаю вам объединить их:
enum Month {
Jan, January=Jan, Feb, February=Feb, Mar, March=Mar,
Apr, April=Apr, May, Jun, June=Jun,
Jul, July=Jul, Aug, August=Aug, Sep, September=Sep,
Oct, October=Oct, Nov, November=Nov, Dec, December=Dec};
, которые будут иметь точно такой же эффект и более удобны.
Если вы хотите, чтобы январь имел значение 1 вместо 0, добавьте это:
enum Month {
Jan=1, January=Jan, Feb, February=Feb, ....
В C ++, чтобы избежать столкновения имен, вы можете заключить перечисления в структуры:
struct Month { enum {January, February, March, April, May, June, July,
August, September, October, November, December}; };
struct ShortMonth { enum {Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec}; };
То, что раскрутил, сказал. Но я также хотел бы сказать, что ваш пример выглядит как довольно необычное использование перечислений. Я не вижу значения, когда ShortMonth и LongMonth ссылаются на одно и то же - это будет иметь смысл для строк, но не для перечислений. Почему бы просто не иметь тип enum для одного месяца?
Мое предложение здесь - иметь только одно перечисление, так как они одного типа. Если вы хотите, чтобы короткие псевдонимы вводили меньше в вашем коде (даже если бы я не советовал вам это делать), вы можете сделать:
enum Month {
January, Jan = January,
February, Feb = February,
March, Mar = March,
April, Apr = April
May,
June, Jun = June,
July, Jul = July,
...};
И иметь разные имена презентаций (короткие и длинные), у вас должно быть два разных строковых массива, которые индексируются перечислением.
char[MAX_MONTH_NAME_LENGTH][12] month_long_names = {
"January", "February", ...
}
char[3][12] short_long_names = {
"Jan", "Feb", ...
}
printf("month %d long name is %s, and short name is %s\n", May, long_month_names[May], short_month_names[May]);
В C ++ 11 вы можете использовать объемные перечисления , чтобы исправить это. Это удалит имена из глобальной области видимости и поместит их в имя перечисления.
enum class Identity
{
UNKNOWN = 1,
CHECKED = 2,
UNCHECKED =3
};
enum class Status
{
UNKNOWN = 0,
PENDING = 1,
APPROVED = 2,
UNAPPROVED =3
};
int main ()
{
Identity::UNKNOWN;
Status::UNKNOW;
}
Живой пример kbd>
В C перечисления используются без префикса типа, поэтому вы пишете:
month[0] = January;
month[4] = May;
Перечисление Month и ShortMonth имеют одинаковую область видимости, поэтому компилятор не может знать, какой May использовать. Очевидным решением будет префикс перечислений, но я не уверен, что использование этих перечислений в этом случае оправдано.
typedef enum {Jan, January, Feb, February, Mar, March, Apr, April, May, Jun, June, Jul, July,
Aug, August, Sep, September, Oct, October, Nov, November, Dec, December} Month,ShortMonth;
Объединить их стать одним