我正在尝试基于 HDFS 中的 avro 文件创建 hive/impala 表。进行转换的工具是 Spark。
我无法使用spark.read.format("avro")将数据加载到数据框中,因为这样部分doc(列的描述)将会丢失。我可以通过执行以下操作来查看文档:
input = sc.textFile("/path/to/avrofile")
avro_schema = input.first() # not sure what type it is
Run Code Online (Sandbox Code Playgroud)
问题是,它是一个嵌套架构,我不确定如何遍历它以将其映射doc到数据帧中的列描述。我想要doc表的列描述。例如,输入模式如下所示:
"fields": [
{
"name":"productName",
"type": [
"null",
"string"
],
"doc": "Real name of the product"
"default": null
},
{
"name" : "currentSellers",
"type": [
"null",
{
"type": "record",
"name": "sellers",
"fields":[
{
"name": "location",
"type":[
"null",
{
"type": "record"
"name": "sellerlocation",
"fields": [
{
"name":"locationName",
"type": [
"null",
"string" …Run Code Online (Sandbox Code Playgroud) 对于下面从 avro 文件生成的数据框,我尝试以列表或其他格式获取列名称,以便我可以在 select 语句中使用它。node1并node2具有相同的元素。例如,我知道我们可以这样做df.select(col('data.node1.name')),但我不确定
productvalues和porders选入单独的数据框/表中?输入架构:
root
|-- metadata: struct
|...
|-- data :struct
| |--node1 : struct
| | |--name : string
| | |--productlist: array
| | |--element : struct
| |--productvalues: array
| |--element : struct
| |-- pname:string
| |-- porders:array
| |--element : struct
| |-- ordernum: int
| |-- field: string
|--node2 : struct
| |--name : string
| |--productlist: array
| …Run Code Online (Sandbox Code Playgroud) 对于下面的类,我理解c1.equals(c3)返回false c1.clone()会创建指向同一对象的不同引用.但为什么carList1.equals(carList2)回归真实?为什么它不同c1.equals(c3)?提前谢谢了!
class Car implements Cloneable {
private String plate;
private double maxSpeed;
public Car(String lp, double max) {
license = lp;
maxSpeed = max;
}
public static void main(String[] args) throws Exception{
Car c1 = new Car("ABC123", 150.0);
Car c2 = new Car("ABC123", 150.0);
Car c3 = (Car) c1.clone();
ArrayList<Car> carList1 = new ArrayList<Car>();
carList1.add(c1);
carList1.add(c2);
ArrayList carList2 = (ArrayList) carList1.clone();
}
}
Run Code Online (Sandbox Code Playgroud) 我对这个问题感到困惑:指令“LEA R0,A"执行后寄存器 0 中存储的值是多少?为什么答案是 x370C?我认为它应该将A的地址加载到R0中?如果是这样,我们如何知道地址?有人可以帮忙吗?非常感谢!
.ORIG X3700
LEA R0, A
LDI R2, C LDR R3, R0, 2
AND R1, R1, #0
IN
ST R0, D
JSR F
HALT
F LD R1, B
ADD R1, R1, #1
BRp F
RET
A .FILL X1234
B .FILL X370B
C .FILL X370C
D .BLKW 2
E .STRINGZ "ABCD"
G .FILL X1234
.END
Run Code Online (Sandbox Code Playgroud) 考虑到下面的例子,我很困惑为什么第一个例子的结果是4,8,6,第二个例子是4,8,3?对我来说,在第一个例子中,只评估succ(3)和dub(4),y应该是3?有人可以帮忙解释它是如何工作的吗?非常感谢!
例一:
public class Hello {
public static void Main(string[] args) {
int y = 0;
Func<int,bool> even = (n) => { return n%2 == 0; };
Func<int,int> dub = (n) => { y += 2; return n + n; };
Func<int,int> succ = (n) => { y += 1; return n + 1; };
Func<bool, int, int, int> if1 = (c, t, f) => c? t: f;
y = 0;
var a1 = if1(even(3), dub(3), succ(3));
var a2 = …Run Code Online (Sandbox Code Playgroud) 我正在查看Scanner用于读取文件的示例(使用Java).在一个示例中,Scanner使用以下构造:
s = new Scanner(new BufferedReader(new FileReader("input.txt"))
Run Code Online (Sandbox Code Playgroud)
但在另一个例子中,代码如下所示.我的问题是,Scanner下面宣布的方式是否有问题?我们不需要使用 s = new Scanner(new BufferedReader(new FileReader("input.txt"))构造函数吗?
int howMany;
Scanner scan = null;
File f;
String[] words = null;
try {
f = new File(filename);
scan= new Scanner(f);
howMany = scan.nextInt();
words = new String[howMany];
for (int i = 0; i < howMany; i++) {
words[i] = scan.next();
}
} catch (IOException e) {
System.out.println(e);
}
Run Code Online (Sandbox Code Playgroud) 在下面的例子中,我认为它是关于运行时多态性的,但我无法弄清楚为什么要y.m1(x)打印出来A.我的理解是在类中y.m1()调用m1()方法B,因为y包含了一个对象B.既然x作为参数传递给它,并且它属于A比它宽的类,它B不会导致运行时错误吗?另外怎么z.m1(y)打印出去A?
提前谢谢了!
class A {
public void m1(A a) {
System.out.println("A");
}
}
class B extends A {
public void m1(B b) {
System.out.println("B");
}
}
class D2 {
public static void main(String[] args) {
A x = new A();
A y = new B();
B z = new B();
}
}
Run Code Online (Sandbox Code Playgroud) 我正在学习使用 Maven 和 Log4J。在 POM 文件中,我添加了以下依赖项:
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
当我尝试import org.slf4j.Logger在主类中导入时,Eclipse 显示“无法解析导入 org.slf4j”。我搜索了一段时间寻找解决方案,似乎我需要在这里下载分发文件http://www.slf4j.org/download.html并“将 jar 添加到类路径”?我很困惑:Maven 不会自动下载吗?如何“将 jar 添加到类路径”?我是这里真正的初学者。非常感谢您的帮助!
java ×4
apache-spark ×2
avro ×2
pyspark ×2
python ×2
arraylist ×1
assembly ×1
c# ×1
casting ×1
clone ×1
constructor ×1
dataframe ×1
deferred ×1
dependencies ×1
eclipse ×1
equals ×1
file-io ×1
func ×1
hive ×1
if-statement ×1
io ×1
lc3 ×1
load ×1
log4j ×1
maven ×1
object ×1
overriding ×1
polymorphism ×1
return ×1
typing ×1