То, что вы хотите, невозможно без пользовательского UDF. В Scala вы можете сделать что-то вроде этого:
val data = sc.parallelize(Seq(
"""{"userId": 1, "someString": "example1",
"varA": [0, 2, 5], "varB": [1, 2, 9]}""",
"""{"userId": 2, "someString": "example2",
"varA": [1, 20, 5], "varB": [9, null, 6]}"""
))
val df = sqlContext.read.json(data)
df.printSchema
// root
// |-- someString: string (nullable = true)
// |-- userId: long (nullable = true)
// |-- varA: array (nullable = true)
// | |-- element: long (containsNull = true)
// |-- varB: array (nullable = true)
// | |-- element: long (containsNull = true)
Теперь мы можем определить zip
udf:
import org.apache.spark.sql.functions.{udf, explode}
val zip = udf((xs: Seq[Long], ys: Seq[Long]) => xs.zip(ys))
df.withColumn("vars", explode(zip($"varA", $"varB"))).select(
$"userId", $"someString",
$"vars._1".alias("varA"), $"vars._2".alias("varB")).show
// +------+----------+----+----+
// |userId|someString|varA|varB|
// +------+----------+----+----+
// | 1| example1| 0| 1|
// | 1| example1| 2| 2|
// | 1| example1| 5| 9|
// | 2| example2| 1| 9|
// | 2| example2| 20|null|
// | 2| example2| 5| 6|
// +------+----------+----+----+
С сырым SQL:
sqlContext.udf.register("zip", (xs: Seq[Long], ys: Seq[Long]) => xs.zip(ys))
df.registerTempTable("df")
sqlContext.sql(
"""SELECT userId, someString, explode(zip(varA, varB)) AS vars FROM df""")
@mystackrunnethover отчасти правильно, не обязательно получать покрытие этой линии, но на всякий случай:
Я использую эти тесты как «тесты на разумность», чтобы также убедиться, что Jest даже работает.
Распространенной ошибкой является предположение, что imported_thing.toBeTruth()
потерпит неудачу, если импорт не сработал. Это не будет - imported_thing
будет пустым объектом, что является правдой.
Вот что мы используем:
import Account from '/account';
//describe block
expect(Account).toBeTruthy();
expect(Object.keys(Account).length > 0).toBe(true);
Это, конечно, работает, только если то, что Account
действительно имеет свойства (и должно быть). Другой метод заключается в том, чтобы специально проверить свойства, которые вы ожидаете.
Из того, что я вижу из вашего кода, просто импортируйте shipmentsPagination
из index.js
в тесте:
import defaultExport from '../../actions/'; // import the default export from index.js
const { shipments: shipmentsPagination } = defaultExport; // and use it to get shipmentsPagination
import {
setFilters,
removeFilter,
toggleFiltersModal,
setCSVDataAction,
} from '../../actions/shipments'; // everything else can come from shipments.js
Импортирование shipmentsPagination
из index.js
убедится, что строка export
в index.js
проверяется.