Вы можете просто передать его в переменной PYSPARK_SUBMIT_ARGS
. Например:
export PACKAGES="com.databricks:spark-csv_2.11:1.3.0"
export PYSPARK_SUBMIT_ARGS="--packages ${PACKAGES} pyspark-shell"
Эти свойства также могут быть установлены динамически в вашем коде до того, как SparkContext
/ SparkSession
и соответствующая JVM были запущены:
packages = "com.databricks:spark-csv_2.11:1.3.0"
os.environ["PYSPARK_SUBMIT_ARGS"] = (
"--packages {0} pyspark-shell".format(packages)
)
Вот несколько вещей, которые вы могли бы сделать:
Экспортировать const
из модуля . В зависимости от вашего варианта использования вы можете просто:
export const constant1 = 33;
И импортировать это из модуля, где это необходимо. Или, опираясь на свою идею статического метода, вы можете объявить static
get accessor :
const constant1 = 33,
constant2 = 2;
class Example {
static get constant1() {
return constant1;
}
static get constant2() {
return constant2;
}
}
Таким образом, вам не нужны скобки:
const one = Example.constant1;
Затем, как вы говорите, поскольку class
является просто синтаксическим сахаром для функции, вы можете просто добавить свойство без записи например:
class Example {
}
Object.defineProperty(Example, 'constant1', {
value: 33,
writable : false,
enumerable : true,
configurable : false
});
Example.constant1; // 33
Example.constant1 = 15; // TypeError
Может быть приятно, если бы мы могли просто сделать что-то вроде:
class Example {
static const constant1 = 33;
}
Но, к сожалению, этот синтаксис свойства класса в предложении ES7, и даже тогда он не позволит добавить const
к свойству.
class Whatever {
static get MyConst() { return 10; }
}
let a = Whatever.MyConst;
Кажется, работает для меня.
Я использую babel
, и для меня работает следующий синтаксис:
class MyClass {
static constant1 = 33;
static constant2 = {
case1: 1,
case2: 2,
};
// ...
}
MyClass.constant1 === 33
MyClass.constant2.case1 === 1
Пожалуйста, учтите, что вам нужен пресет "stage-0"
. Чтобы установить его:
npm install --save-dev babel-preset-stage-0
// in .babelrc
{
"presets": ["stage-0"]
}
Обновление:
в настоящее время используют stage-2
Как https://stackoverflow.com/users/2784136/rodrigo-botti сказал, я думаю, что вы ищете Object.freeze()
. Вот пример класса с неизменной статикой:
class User {
constructor(username, age) {
if (age < User.minimumAge) {
throw new Error('You are too young to be here!');
}
this.username = username;
this.age = age;
this.state = 'active';
}
}
User.minimumAge = 16;
User.validStates = ['active', 'inactive', 'archived'];
deepFreeze(User);
function deepFreeze(value) {
if (typeof value === 'object' && value !== null) {
Object.freeze(value);
Object.getOwnPropertyNames(value).forEach(property => {
deepFreeze(value[property]);
});
}
return value;
}
Также можно использовать Object.freeze
для объекта class (es6) / constructor function (es5), чтобы сделать его неизменным:
class MyConstants {}
MyConstants.staticValue = 3;
MyConstants.staticMethod = function() {
return 4;
}
Object.freeze(MyConstants);
// after the freeze, any attempts of altering the MyConstants class will have no result
// (either trying to alter, add or delete a property)
MyConstants.staticValue === 3; // true
MyConstants.staticValue = 55; // will have no effect
MyConstants.staticValue === 3; // true
MyConstants.otherStaticValue = "other" // will have no effect
MyConstants.otherStaticValue === undefined // true
delete MyConstants.staticMethod // false
typeof(MyConstants.staticMethod) === "function" // true
Попытка изменить класс даст вам мягкое -fail (не будет бросать никаких ошибок, это просто не будет иметь никакого эффекта).
В в этом документе указано:
Существует (намеренно) нет прямого декларативного способа определения свойств свойств свойств прототипа (отличных от методов) или свойство экземпляра
blockquote>Это означает, что это намеренно нравится.
Возможно, вы можете определить переменную в конструкторе?
constructor(){ this.key = value }
Вы можете создать способ определения статических констант в классе с использованием нечетной функции классов ES6. Поскольку statics наследуются по своим подклассам, вы можете сделать следующее:
const withConsts = (map, BaseClass = Object) => {
class ConstClass extends BaseClass { }
Object.keys(map).forEach(key => {
Object.defineProperty(ConstClass, key, {
value: map[key],
writable : false,
enumerable : true,
configurable : false
});
});
return ConstClass;
};
class MyClass extends withConsts({ MY_CONST: 'this is defined' }) {
foo() {
console.log(MyClass.MY_CONST);
}
}
Вот еще один способ сделать
/*
one more way of declaring constants in a class,
Note - the constants have to be declared after the class is defined
*/
class Auto{
//other methods
}
Auto.CONSTANT1 = "const1";
Auto.CONSTANT2 = "const2";
console.log(Auto.CONSTANT1)
console.log(Auto.CONSTANT2);
Примечание - порядок важен, вы не можете иметь константы выше
Использование console.log (Auto.CONSTANT1);