Spark не может отфильтровать по строке, содержащей путь к папке - PullRequest
0 голосов
/ 27 февраля 2019

У меня странное поведение API запроса SQL sql, например:

У меня есть следующий набор данных:

+---+-------------------------------+--------+
|key|value                          |someData|
+---+-------------------------------+--------+
|1  |AAA                            |5       |
|1  |VVV                            |6       |
|1  |DDDD                           |8       |
|3  |rrerw                          |9       |
|4  |RRRRR                          |13      |
|6  |AAAAABB                        |15      |
|6  |C:\Windows\System32\svchost.exe|20      |
+---+-------------------------------+--------+

Где значение имеет тип String,

Когда я пишу следующую команду, последняя строка отфильтровывается:

data.filter(col("value").notEqual("C:\\Windows\\System32\\svchost.exe")).show();

Применение следующей команды не позволяет отфильтровать последнюю строку:

data.createTempView("temp");
spark.sql("select * from temp where value != 'C:\\Windows\\System32\\svchost.exe'").show();

Фильтрация по любому другому значениюнапример, "ААА" работает.Есть предложения?

РЕДАКТИРОВАТЬ: весь код:

public class main {
    private static StructType schema = new StructType(new StructField[]{
            DataTypes.createStructField("key", DataTypes.IntegerType, true),
            DataTypes.createStructField("value", DataTypes.StringType, true),
            DataTypes.createStructField("someData", DataTypes.IntegerType, true)
    });

    public static class Dummy implements Serializable {
        int key;
        String value;
        int someData;

        public Dummy() {
            this.key = 1;
            this.value = "";
            this.someData = 0;
        }

        public Dummy(int key, String value, int someData) {
            this.key = key;
            this.value = value;
            this.someData = someData;
        }

        public int getKey() {
            return key;
        }

        public void setKey(int key) {
            this.key = key;
        }

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }

        public int getSomeData() {
            return someData;
        }

        public void setSomeData(int someData) {
            this.someData = someData;
        }
    }

    public static void main(String[] args) throws AnalysisException {
        String master = "local[*]";
        SparkConf sparkConfiguration = new SparkConf().setAppName("Test!").setMaster(master);
        SparkSession spark = SparkSession.builder().config(sparkConfiguration).getOrCreate();
        spark.sparkContext().setLogLevel("ERROR");

        List<Dummy> intArray = Arrays.asList(new Dummy(1, "AAA", 5), new Dummy(1, "VVV", 6), new Dummy(1, "DDDD", 8), new Dummy(3, "rrerw", 9), new Dummy(4, "RRRRR", 13), new Dummy(6, "AAAAABB", 15), new Dummy(6, "C:\\Windows\\System32\\svchost.exe", 20));
        Dataset<Dummy> data = spark.createDataset(intArray, Encoders.bean(Dummy.class));

        Dataset<Row> rawMapping = data.map((MapFunction<Dummy, Row>) row -> RowFactory.create(
                row.getKey(),
                row.getValue() == "" ? null : row.getValue(),
                row.getSomeData()
        ), RowEncoder.apply(schema));

        System.out.println("rawMapping");
        rawMapping.withColumn("id", monotonically_increasing_id()).show(false);

        rawMapping.filter(col("value").notEqual("C:\\Windows\\System32\\svchost.exe")).show();


        rawMapping.createTempView("temp");

        spark.sql("select * from temp where value != 'VVV'").show();
        spark.sql("select * from temp where value != 'C:\\Windows\\System32\\svchost.exe'").show();

    }
}

1 Ответ

0 голосов
/ 27 февраля 2019

Попробуйте """

spark.sql("""select * from temp where value != 'C:\\Windows\\System32\\svchost.exe'""")
     .show(false)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...