Я полагаю, вы также можете добавить это как переменную в свой файл spark-defaults.conf. Итак, что-то вроде:
spark.jars.packages com.databricks:spark-csv_2.10:1.3.0
Это будет загружать библиотеку spark-csv в PySpark каждый раз при запуске драйвера.
Очевидно, что ответ нуля более гибкий, потому что вы можете добавить эти строки в свое приложение PySpark перед импортом пакета PySpark:
import os
os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages com.databricks:spark-csv_2.10:1.3.0 pyspark-shell'
from pyspark import SparkContext, SparkConf
Таким образом вы импортируете только те пакеты, которые вы на самом деле нужен для вашего скрипта.
Java поддерживает * ковариантные типы возврата для переопределенных методов. Это означает, что переопределенный метод может иметь конкретный тип возврата more . То есть, если новый тип возвращаемого значения присваивается возвращаемому типу метода, который вы переопределяете, это разрешено.
Например:
class ShapeBuilder {
...
public Shape build() {
....
}
class CircleBuilder extends ShapeBuilder{
...
@Override
public Circle build() {
....
}
Это указано в раздел 8.4.5 Спецификации языка Java :
Типы возвращаемых данных могут варьироваться в зависимости от методов, которые переопределяют друг друга, если типы возвращаемого типа являются ссылочными типами. Понятие обратной подстановочной функции поддерживает ковариантные возвращения, то есть специализацию типа возврата к подтипу.
Объявление метода d1 с типом возврата R1 является возвращаемым типом-заменяемым для другого метода d2 с возвратным типом R2, тогда и только тогда, когда выполняются следующие условия:
blockquote>
- Если R1 недействителен, то R2 является недействительным.
- Если R1 является примитивным типом, то R2 является идентичен R1.
- Если R1 является ссылочным типом, то: R1 является либо подтипом R2, либо R1 может быть преобразован в подтип R2 путем непроверенного преобразования (п. 5.1.9) или R1 = | R2 |
(«| R2 |» относится к стиранию R2, как определено в §4.6 JLS .)
< hr>* До появления Java 5 у Java были типы возвращаемых инвариантных , что означало возвращаемый тип переопределения метода, необходимый для точного соответствия переопределяемого метода.
В общем, да, возвращаемый тип метода переопределения может быть другим. Но это не так. В этом случае есть некоторые случаи.
Случай 1: Если тип возврата является примитивным типом данных или void.
Выход: если тип возврата недействителен или примитив, тогда тип данных метода родительского класса и метод переопределения должны быть одинаковыми. например если тип возвращаемого значения - int, float, string, то он должен быть таким же
Случай 2: Если тип возвращаемого значения является производным типом данных:
Выход: если тип возвращаемого значения родительского класса метод является производным типом, тогда тип возврата метода переопределения - это тот же производный тип данных подкласса к производному типу данных. например Предположим, что у меня есть класс A B - подкласс к A C - подкласс к B D - это подкласс к C, то если если суперкласс возвращает тип A, то переопределяющий метод является подклассом, который может возвращать типы A, B, C или D i.e его подтипы. Это также называется ковариацией.
yes Возможно. Тип возврата может быть другим, только если тип возвращаемого типа родительского класса - это супер тип метода возвращаемого типа дочернего класса .. означает
class ParentClass {
public Circle() method1() {
return new Cirlce();
}
}
class ChildClass extends ParentClass {
public Square method1() {
return new Square();
}
}
Class Cirlce {
}
class Square extends Circle {
}
---
Если это другое значение возвращаемый тип может быть разрешен ...
Да, если они возвращают подтип. Вот пример:
package com.sandbox;
public class Sandbox {
private static class Parent {
public ParentReturnType run() {
return new ParentReturnType();
}
}
private static class ParentReturnType {
}
private static class Child extends Parent {
@Override
public ChildReturnType run() {
return new ChildReturnType();
}
}
private static class ChildReturnType extends ParentReturnType {
}
}
Этот код компилируется и запускается.
Остальные ответы правильны, но, на удивление, все это не учитывает теоретический аспект: типы возврата могут быть разными, но они могут ограничивать только тип, используемый в суперклассе из-за Принципа замещения Лискова .
Это супер просто: когда у вас есть «клиентский» код, который вызывает некоторый метод:
int foo = someBar.bar();
, то вышеприведенное должно работать (и возвращать что-то, что является int
независимо от того, какая реализация bar()
вызывается).
Значение: если есть подкласс Bar, который переопределяет bar()
, вам все равно придется возвращать то, что не нарушает «код вызывающего абонента», ,
Другими словами: предположим, что база bar()
должна возвращать int. Затем подкласс может возвращать short
- но не long
, потому что вызывающие абоненты будут иметь дело с значением short
, но не long
!
Да, это может отличаться, но у них есть некоторые ограничения.
Перед Java 5.0, когда вы переопределяете метод, оба параметра и тип возвращаемого значения должны точно совпадать. В Java 5.0 он вводит новый объект, называемый возвращаемым типом covariant. Вы можете переопределить метод с той же сигнатурой, но возвращает подкласс возвращаемого объекта. Другими словами, метод в подклассе может возвращать объект, тип которого является подклассом типа, возвращаемого методом с той же сигнатурой в суперклассе.
ДА это возможно
class base {
base show(){
System.out.println("base class");
return new base();
}
}
class sub extends base{
sub show(){
System.out.println("sub class");
return new sub();
}
}
class inheritance{
public static void main(String []args) {
sub obj=new sub();
obj.show();
}
}
Типы переопределения и возврата, а также ковариантные возвращает подкласс должен точно определить метод, который соответствует унаследованной версии. Или, как и в случае с Java 5, вам разрешено изменять тип возврата в образце кода
class Alpha {
Alpha doStuff(char c) {
return new Alpha();
}
}
class Beta extends Alpha {
Beta doStuff(char c) { // legal override in Java 1.5
return new Beta();
}
} }
. С Java 5 этот код будет скомпилирован. Если вы попытаетесь скомпилировать этот код с компилятором 1.4, то будете пытаться использовать несовместимый тип возврата - sandeep1987 1 мин. Назад